我有三个数据框。一个'主'数据帧,我想合并其他两个子数据帧。
main = data.frame(a = LETTERS[1:5], b = round(rnorm(5),2))
a b
A 0.41
B -1.06
C -0.65
D -1.27
E 1.03
sub1 = data.frame(a = LETTERS[2:4], c = sample(c(100, 200, 300), 3, replace=T))
a c
B 200
C 200
D 200
sub2 = data.frame(a = LETTERS[c(1,5)], c = sample(c(999, 888), 2, replace=T))
a c
A 999
E 888
在第一次合并中,我想通过sub1
将main
合并到"a"
,这样就可以了。
merged1 = merge(main, sub1, by="a", all.x=T)
a b c
A 0.41 NA
B -1.06 300
C -0.65 300
D -1.27 100
E 1.03 NA
现在我想加入/合并sub2
到merged1
。在我的例子中,sub2
提供的值替换了c列中的NA。具体来说,我想用sub2
中的值替换这些NA。我尝试了这个(以及all.x
,all.y
的其他参数:
merge(merged1, sub2, by="a", all.x=T)
a b c.x c.y
A 0.41 NA 999
B -1.06 300 NA
C -0.65 300 NA
D -1.27 100 NA
E 1.03 NA 999
如何才能将此变为仅包含合并的一列?
答案 0 :(得分:4)
注意:我的种子已经设定,因此结果与问题中的结果不同。
如果将sub1或sub2绑定在一起,则可以在一次合并中完成所有操作。
set.seed(42)
main = data.frame(a = LETTERS[1:5], b = round(rnorm(5),2))
sub1 = data.frame(a = LETTERS[2:4], c = sample(c(100, 200, 300), 3, replace=T))
sub2 = data.frame(a = LETTERS[c(1,5)], c = sample(c(999, 888), 2, replace=T))
#Create one data frame
all_sub <- rbind(sub1,sub2)
merged <- merge(main, all_sub, by="a", all.x=T)
输出符合预期:
> merged
a b c
1 A 1.37 999
2 B -0.56 200
3 C 0.36 300
4 D 0.63 300
5 E 0.40 999