【发布时间】:2021-11-23 17:01:15
【问题描述】:
我想在 R 中合并两个数据帧 d1 和 d2。它应该按“ID”分组,但最后应该只存在一列“日期”,以便进一步分析(重要的是知道“数字”条目(d2)是否链接到“类型”条目(d1)或者它与它的接近程度)
假设 d1 和 d2 是
d1 <- data.frame(ID = c(1,1,2,2,2,3),
sex = c("male", "male", "male", "male", "male", "female"),
date = c("2016-06-21 08:15:00", "2016-06-21 23:00:00",
"2017-04-19 07:15:00", "2017-04-20 07:15:00", "2017-04-20 08:15:00",
"2017-08-20 23:15:00" ),
type = c("horse", "snake", "horse", "horse", "monkey", "fish"))
d2 <- data.frame(ID = c(1,1,1,2,2,3,3),
date = c("2016-06-20 08:15:00", "2016-06-21 22:15:00", "2016-06-22 08:45:00",
"2017-04-19 07:15:00", "2017-04-19 09:30:00",
"2017-08-19 08:15:00", "2017-08-21 06:30:00"),
number = c(65,234,64,234,6243,23,243))
我想要的输出是
d12 <- data.frame(ID = c(1,1,1,1,1,2,2,2,2,3,3,3),
sex = c(NA, "male", NA, "male", NA, "male", NA, "male", "male" , NA, "female", NA),
date = c("2016-06-20 08:15:00","2016-06-21 08:15:00", "2016-06-21 22:15:00", "2016-06-21 23:00:00", "2016-06-22 08:45:00",
"2017-04-19 07:15:00", "2017-04-19 09:30:00", "2017-04-20 07:15:00", "2017-04-20 08:15:00",
"2017-08-19 08:15:00", "2017-08-20 23:15:00", "2017-08-21 06:30:00" ),
type = c(NA, "horse", NA, "snake", NA, "horse", NA, "horse", "monkey", NA, "fish", NA),
number= c(65, NA, 234, NA, 64, 234, 6243, NA, NA, 23, NA, 243))
我试过这样做
d12 <- full_join(
d1 %>% group_by(ID) %>% mutate(time=row_number()),
d2 %>% group_by(ID) %>% mutate(time=row_number()),
by = c("ID", "time"))
但或多或少我只是添加了一些列,我并没有真正接近我想要的输出。我非常期待您的帮助。
【问题讨论】:
-
@RonakShah 我认为这是我的误解。我的意思是它们是否按时间顺序关联。因此,如果我只有一列“日期”,它既指“类型”又指“数字”。
-
d2缺少sex列。d12:1 male 2016-06-20 08:15:00 <NA> 65的第二行怎么创建?date与d1的第一行不匹配。 -
@MartinGal 提到的数据框只是一个例子。在原始版本中,d2 中有很多列,但 d1 中没有,反之亦然。 d12 中是否有 NA 并不重要。 d12的第二行就是d1的第一行。
-
* d2(对不起)
-
@Franziska 那么对于第 2 行,
sex列必须为空吗?很抱歉,但我仍然不明白合并d1和d2的算法是什么样子的。
标签: r dataframe group-by merge combine