我已经花了这一天的更好的一部分,但我一直在卡住。这不会花费我很长时间在Excel中使用索引匹配匹配,但我对R更新,并且合并数据似乎并不直截了当。我搜索了该网站,发现了类似的问题,但没有针对此类问题的解决方案。在R中部分覆盖合并两个不同尺寸的数据帧
我有两个数据帧。它们在两个维度上都有不同的长度。 a
是4x4,而b
是3x3。部分重叠:
a <- data.frame("ID" = c(1:4), "A" = c(21:24), "B" = c(31:34), "C" = c(41:44))
a
ID A B C
1 1 21 31 41
2 2 22 32 42
3 3 23 33 43
4 4 24 34 44
和
b <- data.frame("ID" = c(4:6), "C" = c(22:24), "D" = c(32:34))
b
ID C D
1 4 22 32
2 5 23 33
3 6 24 34
我合并的 “ID” 号码。我的目标是让他们看起来像
c <- data.frame("ID" = c(1:6), "A" = c(21:24, NA, NA), "B" = c(31:34, NA, NA), "C" = c(41:43,22:24), "D" = c(NA, NA, NA, 32:34))
c
ID A B C D
1 21 31 41 NA
2 22 32 42 NA
3 23 33 43 NA
4 24 34 22 32
5 NA NA 23 33
6 NA NA 24 34
正如你所看到的,最终的数据帧合并这两个并分配娜缺少的信息。在“C”栏中,我想b
覆盖a
它有数字值。在这个例子中,在c[4,3]
值应该改变从44至22
大多数这是很简单的。但让列“C”正确是一场噩梦。我做了简单的事情第一:
merge(a, b, by = "ID", all = T)
它几乎是卓有成效的,但与重复行个“C”结束:
ID A B C.x C.y D
1 1 21 31 41 NA NA
2 2 22 32 42 NA NA
3 3 23 33 43 NA NA
4 4 24 34 44 22 32
5 5 NA NA NA 23 33
6 6 NA NA NA 24 34
这不会是如此糟糕,如果我能找出如何正确合并重复的行,因为这样我可以只运行
merge(a[-4], b[-2], by = "ID", all = T)
ID A B D
1 1 21 31 NA
2 2 22 32 NA
3 3 23 33 NA
4 4 24 34 32
5 5 NA NA 33
6 6 NA NA 34
到别的合并的一切,那么在事后合并的“C”带来的。
但我无法弄清楚如何处理这部分内容:
merge(a[c(1,4)], b[c(1,2)], by = "ID", all = T)
ID C.x C.y ID C
1 1 41 NA 1 1 41
2 2 42 NA 2 2 42
3 3 43 NA -> 3 3 43
4 4 44 22 4 4 22
5 5 NA 23 5 5 23
6 6 NA 24 6 6 24
有一定有办法。
感谢您的帮助!
顺便说一句,以上的数据帧是例子,你可能会意识到。我试图合并的实际数据框大致为2000x100和200x20,因此手动更改单个元素将无济于事。 – trijamms