R

时间:2016-04-11 15:39:12

标签: r if-statement data.table

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

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

编辑:这是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功能,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))&amp ;:第4组结果的第1列是   键入&#39; double&#39;但期待类型“逻辑”#。列类型必须是   每组都一致。另外:警告信息:在   max.default(NA_real_,na.rm = TRUE):没有非缺失参数   最大;返回-Inf

所以我的问题是双重的:

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

由于

0 个答案:

没有答案