【发布时间】:2021-08-14 14:14:38
【问题描述】:
我正在尝试合并或折叠基于 ID 的部分重复行以及基于列的不同条件的行。我希望在新数据框中为每个 ID 保留一行。
这就是我的数据的样子。
ID Var1 Date1 Var2 Date2
1 1 A 2021-05-01 X 2021-05-01
2 1 B 2021-06-01 Y 2021-04-01
3 2 B 2021-03-01 X <NA>
4 2 <NA> <NA> X 2021-03-01
5 3 A <NA> Y 2021-04-01
6 3 <NA> 2021-02-01 <NA> 2021-05-01
7 4 <NA> 2021-04-01 X <NA>
8 4 <NA> 2021-03-01 Z <NA>
9 5 A 2021-02-01 X 2021-03-01
10 5 B 2021-02-01 Y 2021-04-01
我想按 ID 分组并为每个日期变量取最早的日期。然后,我想根据 Date1 提取 Var1 的对应值,根据 Date 2 提取 Var2 的对应值。
ID Var1 Date1 Var2 Date2
1 1 A 2021-05-01 Y 2021-04-01
2 2 B 2021-03-01 X 2021-03-01
3 3 <NA> 2021-02-01 Y 2021-04-01
4 4 <NA> 2021-03-01 <NA> <NA>
5 5 A 2021-02-01 X 2021-03-01
6 5 B 2021-02-01 X 2021-03-01
这是示例数据。
df <- data.frame (ID = c(1,1,2,2,3,3,4,4,5,5), Var1 = c("A", "B", "B", NA, "A", NA, NA, NA, "A", "B"), Date1 = c("2021-05-01", "2021-06-01", "2021-03-01", NA, NA, "2021-02-01", "2021-04-01", "2021-03-01", "2021-02-01", "2021-02-01"), Var2 = c("X", "Y", "X", "X", "Y", NA, "X", "Z", "X", "Y"), Date2 = c("2021-05-01", "2021-04-01", NA, "2021-03-01", "2021-04-01","2021-05-01", NA, NA, "2021-03-01", "2021-04-01"))
并转换为日期变量。
df.test1$P_date <- as.Date(df.test1$P_date, format = "%Y-%m-%d")
df.test1$R_date <- as.Date(df.test1$R_date, format = "%Y-%m-%d")
对于 ID 5,如果日期匹配但 Var1 或 Var2 不匹配,我想保留两行,但如果这太难了,那没关系。
我得到了每个日期变量的最早日期使用
df <- df %>% group_by(ID) %>% mutate(earliest_date1 = last(na.omit(Date1, order_by = Date1)
df <- df %>% group_by(ID) %>% mutate(earliest_date2 = last(na.omit(Date2, order_by = Date2)
但我无法将 Var1 和 Var 2 中的相应值获取到新数据框中的单行中。尝试了各种方法,但我认为我完全没有走在正确的轨道上,所以任何帮助都将不胜感激!
【问题讨论】:
标签: r merge duplicates match collapse