我在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_scheduled_date
。
因此,如果Rescheduled
为NA,则max_scheduled_date
应为
取Scheduled
的值max_scheduled_date
,Rescheduled
如果Scheduled
为NA,则取max_scheduled_date
的值。当两个
列是NA,List<String> strings = List.of("abc","123","zzz");
显然应该采用NA。
如果两列都有日期,则应采用最新的日期。
我在创建这个问题时遇到了很多问题而且没有得到我想要的结果。
日期是POSIXct,遗憾的是这给我带来了一些麻烦。
有人可以帮帮我吗? 先感谢您, 亲切的问候, 阿曼达
答案 0 :(得分:0)
假设两列都是Date
类,我们可以使用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"
也可以使用tidyverse
library(dplyr)
df1 %>%
mutate_all(as.Date) %>%
mutate(max_scheduled_date = pmax(Scheduled, Rescheduled, na.rm = TRUE))
答案 1 :(得分:0)
由于问题标有data.table
,因此这里也是data.table
解决方案。
pmax()
似乎与POSIXct
充分合作。因此,我认为没有理由强制从POSIXct
到Date
类的日期列。
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 ...