R 创建包含最近日期的新列
我对data.table中的数据集有一些问题。基本上,我有 2列:计划交货日期和重新计划交货日期。然而 有些值留空。例如:R 创建包含最近日期的新列,r,date,data.table,R,Date,Data.table,我对data.table中的数据集有一些问题。基本上,我有 2列:计划交货日期和重新计划交货日期。然而 有些值留空。例如: Scheduled Rescheduled NA NA 2016-11-14 2016-11-17 2016-11-15 NA 2016-11-13 2016-11-11 NA 2016-11-15 我想创建一个新列,它指示最近的 两列的日期,例如名为max_sche
Scheduled Rescheduled
NA NA
2016-11-14 2016-11-17
2016-11-15 NA
2016-11-13 2016-11-11
NA 2016-11-15
我想创建一个新列,它指示最近的
两列的日期,例如名为max_scheduled_date的日期。
因此,如果“重新安排”为NA,则应指定最大计划日期
取计划值,而最大计划日期应为
如果计划为NA,则取“重新计划”的值。当两者都
列为NA,最大计划日期显然应为NA。
如果两列都有日期,则应采用最近的日期。
我有很多问题,创造这个,并没有得到我想要的结果
日期太晚了,不幸的是这给我带来了一些麻烦
有人能帮我吗?
提前谢谢大家,,
亲切问候,,
Amanda假设两列都是日期类,我们可以使用pmax为每行创建最大日期
df1[] <- lapply(df1, as.Date) #change to Date class initially
df1$max_scheduled_date <- do.call(pmax, c(df1, na.rm = TRUE))
df1$max_scheduled_date
#[1] NA "2016-11-17" "2016-11-15" "2016-11-13" "2016-11-15"
由于问题是用data.table标记的,这里还有一个data.table解决方案 pmax似乎可以很好地与POSIXct配合使用。因此,我认为没有理由将日期列从POSIXct强制到date类
我忘了提到,日期的类别是POSIXct,这给我使用max函数带来了麻烦…@amandabevu然后执行df1%>%mutatemax_scheduled_date=pmaxas.DateScheduled,as.datereschedule我按照你说的做了,但是我得到了max_scheduled_date的所有NAs。。我不知道我做错了什么@akrun@AmandaBovul我无法重现这个问题,因为一旦POSIXct转换为“Date”类,它就可以正常工作me@AmandaBovul你能从头再开始吗。另外,如果您可以发布您在文章中展示的示例的dput
library(dplyr)
df1 %>%
mutate_all(as.Date) %>%
mutate(max_scheduled_date = pmax(Scheduled, Rescheduled, na.rm = TRUE))
setDT(DF)[, max_scheduled_date := pmax(Scheduled, Rescheduled, na.rm = TRUE)]
DF
Scheduled Rescheduled max_scheduled_date
1: <NA> <NA> <NA>
2: 2016-11-14 2016-11-17 2016-11-17
3: 2016-11-15 <NA> 2016-11-15
4: 2016-11-13 2016-11-11 2016-11-13
5: <NA> 2016-11-15 2016-11-15
DF <- setDF(fread(
"Scheduled Rescheduled
NA NA
2016-11-14 2016-11-17
2016-11-15 NA
2016-11-13 2016-11-11
NA 2016-11-15"
)[, lapply(.SD, as.POSIXct)])
str(DF)
'data.frame': 5 obs. of 2 variables:
$ Scheduled : POSIXct, format: NA "2016-11-14" "2016-11-15" ...
$ Rescheduled: POSIXct, format: NA "2016-11-17" NA ...