我在处理data.table中的Date类时遇到了问题。假设我有:
library(data.table)
library(lubridate)
dt <- data.table(ID = c(1,1,1,2,2,2,3,3,3), BD = as_date(c("2012-5-6", "2012-5-6", "2012-5-6", NA, NA, "2012-5-19", NA, NA, NA)))返回,
ID BD
1: 1 2012-05-06
2: 1 2012-05-06
3: 1 2012-05-06
4: 2 <NA>
5: 2 <NA>
6: 2 2012-05-19
7: 3 <NA>
8: 3 <NA>
9: 3 <NA>现在NA变成了Date类,所以我可以使用下面的代码来唯一:
dt[, ifelse(all(is.na(BD)), as_date(NA), unique(BD)), by = ID]它返回的内容如下:
ID V1
1: 1 15466
2: 2 NA
3: 3 NA我期望得到以下结果:
ID V1
1: 1 2012-05-06
2: 2 2012-05-19
3: 3 <NA>你能给我一些建议吗?
发布于 2019-07-25 20:23:31
我想知道这是否有帮助:
dt %>%
group_by(ID) %>%
summarise(
BD = min(BD, na.rm = T)
)您将收到一条警告消息,因为一个组中的所有值都是NA。否则,它就会起作用。
# A tibble: 3 x 2
ID BD
<dbl> <date>
1 1 2012-05-06
2 2 2012-05-19
3 3 NA 发布于 2019-07-25 22:40:59
这个怎么样?
unique(setorder(dt, ID, BD,na.last=TRUE), by="ID")另外,保留你的代码:
dt2 <- dt[, ifelse(all(is.na(BD)), as_date(NA), unique(BD)), by = ID][, V1:=as.Date(V1, origin=ymd("19700101"))]https://stackoverflow.com/questions/57201128
复制相似问题