我的数据,
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。
答案 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