我在data.table中遇到条件语句的问题 .

我的DF由与不同ID相关联的不同日期组成 . 我希望得到每个id的最大日期 . 但:

EDIT :这是DF,对不起:

df <- data.frame(id=c(1,1,1,1,2,3,3,3,4,5,5,5,5),
                 date=c("2016-01-21", "2016-01-13", NA, "2016-01-13",
                        "2016-01-13", "2016-01-13", "2016-02-02", "2016-01-25", NA,
                        "2016-01-25", "2016-01-25", "2016-01-25", "2016-01-25"))

如果我不包括ifelse fonction,data.table会给我一个警告,因为ID 4的单个NA在过程中被删除了

agg <- setDT(df)[,
                 .SD[,
                     .(max_date=max(as.Date(date), na.rm=TRUE))
                     ],
                 by=.(id)
                 ]

警告消息:在max.default中(NA_real_,na.rm = TRUE):max没有非缺失参数;返回-Inf

此警告显示在 ?max 的文档中

对于min和max,如果只有数字输入且全部为空(在可能删除NA之后),则结果为double(Inf或-Inf) .

如果我用条件处理这个问题,我会收到一个错误:

agg <- setDT(df)[,
                 .SD[,
                     .(max_date=ifelse(
                        (is.na(as.Date(date)) & .N == 1),
                        max(as.Date(date), na.rm=TRUE),
                        NA))
                     ],
                 by=.(id)
                 ]

[.data.table中的错误(setDT(df),, . SD [, . (max_date = ifelse((is.na(as.Date(date))&:组4的结果的第1列是'double的类型'但是期望类型为'logical' . 每个组的列类型必须一致 . 另外:警告消息:在max.default中(NA_real_,na.rm = TRUE):max没有非缺失参数;返回-Inf

所以我的问题是双重的:

  • 我不理解data.table后面的错误

  • 在为新变量赋值时,如何在data.table中包含ifelse语句(假设我想将结果存储在另一个DT中,不通过引用进行修改 . )

谢谢