根据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
我的数据,
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