【发布时间】:2021-03-13 16:55:23
【问题描述】:
我有一个包含 400 多列的大型数据集,这些列代表来自在线平台的某些用户输入元素以及每个输入发生的时间。每行代表一个用户 ID。
这些列中有 200 个属于“POSIXct”“POSIXt”类(例如 2019-11-04 15:33:50),并且可能会出现缺失值,因为并非每个元素都显示给每个用户或由每个用户填写。
我的目标是创建另外两个列,其中包括这 200 个“POSIXct”“POSIXt”列中每行的最早日期和最晚日期。
这里是框架和所需附加列之一的简化示例。 (ID 4 是从不费心打开侧边的人,但有来自其他数据源的数据可用,现在应该保留在数据集中)
ID Other_columns date_column date_column2 date_column3 max_date (what I want)
1 "numeric" 2019-11-04 19:33:50 2019-11-05 15:33:50 2019-11-05 16:33:50 2019-11-05 16:33:50
2 "numeric" NA 2019-11-04 17:20:10 2019-11-09 19:12:50 2019-11-09 19:12:50
3 "numeric" 2019-11-07 20:33:50 NA 2019-11-04 18:31:50 2019-11-07 20:33:50
4 NA NA NA NA NA
到目前为止,我并没有真正进一步过滤掉其他非日期列,
is.POSIXt <- function(x) inherits(x, "POSIXt")
df%>%select(where(is.POSIXt))
我可能应该使用 mutate_at 或其他东西作为条件,而不是选择, 但是检查所有剩余的 200 个日期/时间列然后将最早/最晚日期分配给新创建的列(同时忽略 NA 值)的最佳方法是什么。
【问题讨论】:
-
一个更好的措施:stackoverflow.com/q/62247801/5325862 我建议四处寻找使用
pmax或pmin函数的帖子。您使用较新的where选择助手的想法似乎也不错
标签: r date time lubridate posixct