使用R中匹配的数据帧合并在数据帧中填充NA

时间:2016-04-27 21:35:52

标签: r dataframe merge

我有三个数据框。一个'主'数据帧,我想合并其他两个子数据帧。

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

在第一次合并中,我想通过sub1main合并到"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

现在我想加入/合并sub2merged1。在我的例子中,sub2提供的值替换了c列中的NA。具体来说,我想用sub2中的值替换这些NA。我尝试了这个(以及all.xall.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

如何才能将此变为仅包含合并的一列?

1 个答案:

答案 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