根据R中的id组合行

时间:2015-06-29 18:57:29

标签: r aggregate analysis

我的数据,

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 

我尝试使用聚合和dcast,但他们将日期转换为数字格式,并且仍然无法避免使用na。

2 个答案:

答案 0 :(得分:4)

您可以使用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 

答案 1 :(得分:3)

以下是使用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