Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 创建包含最近日期的新列_R_Date_Data.table - Fatal编程技术网

R 创建包含最近日期的新列

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

我对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的日期。 因此,如果“重新安排”为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 ...