首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在data.table中应用唯一的日期类

如何在data.table中应用唯一的日期类
EN

Stack Overflow用户
提问于 2019-07-25 19:39:54
回答 2查看 69关注 0票数 0

我在处理data.table中的Date类时遇到了问题。假设我有:

代码语言:javascript
复制
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)))

返回,

代码语言:javascript
复制
   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类,所以我可以使用下面的代码来唯一:

代码语言:javascript
复制
dt[, ifelse(all(is.na(BD)), as_date(NA), unique(BD)), by = ID]

它返回的内容如下:

代码语言:javascript
复制
   ID    V1
1:  1 15466
2:  2    NA
3:  3    NA

我期望得到以下结果:

代码语言:javascript
复制
   ID         V1
1:  1 2012-05-06
2:  2 2012-05-19
3:  3       <NA>

你能给我一些建议吗?

EN

回答 2

Stack Overflow用户

发布于 2019-07-25 20:23:31

我想知道这是否有帮助:

代码语言:javascript
复制
dt %>% 
  group_by(ID) %>% 
  summarise(
    BD = min(BD, na.rm = T)
  )

您将收到一条警告消息,因为一个组中的所有值都是NA。否则,它就会起作用。

代码语言:javascript
复制
# A tibble: 3 x 2
     ID BD        
  <dbl> <date>    
1     1 2012-05-06
2     2 2012-05-19
3     3 NA        
票数 1
EN

Stack Overflow用户

发布于 2019-07-25 22:40:59

这个怎么样?

代码语言:javascript
复制
unique(setorder(dt, ID, BD,na.last=TRUE), by="ID")

另外,保留你的代码:

代码语言:javascript
复制
dt2 <- dt[, ifelse(all(is.na(BD)), as_date(NA), unique(BD)), by = ID][, V1:=as.Date(V1, origin=ymd("19700101"))]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57201128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档