根据R中的id组合行

Combining rows based on the id in R

我的数据,

Id|date1|date2   
1|2008-10-01|NA        
1|NA|2008-10-02     
1|NA|2008-10-03     
2|2008-10-02|NA
2|NA|2008-10-03

我想这样输出,

Id|date1|date2|date3    
1|2008-10-01|2008-10-02|2008-10-03        
2|2008-10-02|2008-10-03 

我试过使用 aggregate 和 dcast,但它们正在将日期转换为数字格式,而 na's 仍然无法避免。

您可以使用 data.table 轻松完成此操作,但如果列之间的非缺失值数量不相等,它会变得更加复杂

library(data.table)
setDT(df)[, lapply(.SD, na.omit), by = Id]
#   Id      date1       date2
# 1:  1 2008-10-02 2008-10-02 
# 2:  2 2008-10-02 2008-10-02 

这里有一个类似的想法,使用 tidyr:

library(dplyr)
library(tidyr)

df %>%
  gather(key, value, -Id) %>% 
  na.omit() %>% 
  spread(key, value)

给出:

#  Id      date1      date2
#1  1 2008-10-02 2008-10-02
#2  2 2008-10-02 2008-10-02