合并具有重复列的2个数据框?

时间:2019-07-12 16:44:50

标签: r dataframe merge cbind

我这样有一个空的数据框:

a <- data.frame(x = rep(NA,10))

其中包含以下内容:

    x
1  NA
2  NA
3  NA
4  NA
5  NA
6  NA
7  NA
8  NA
9  NA
10 NA

并且我有另一个这样的数据框(非连续行号是因为该数据框是更大数据框的子集):

    x
1  NA
2  4
3  NA
5  NA
6  5
7  71
8  3

我想要做的是将2个数据帧合并在一起,来自b的值将替换x中的当前值,以产生如下输出:

x
1  NA
2  4
3  NA
4  NA
5  NA
6  5
7  71
8  3
9  NA
10 NA

我的第一个本能是使用这样的for循环:

for (i in rownames(b)){
    a[i,"x"] <- b[i,"x"]
}

但是,这对于大型数据帧而言效率不高。我还没有看到使用merge和cbind / rbind的实现。

有没有更有效的方法来实现这一目标?

2 个答案:

答案 0 :(得分:3)

transform(a, x = b[row.names(a),])
#    x
#1  NA
#2   4
#3  NA
#4  NA
#5  NA
#6   5
#7  71
#8   3
#9  NA
#10 NA

答案 1 :(得分:2)

我们可以基于rownames进行合并:

a <- data.frame(x = rep(NA,10))
b <- data.frame(x = c(NA,4,NA,NA,5,71,3))

data.frame(x=merge(a, b, by=0, suffixes = c(".a","") ,all=TRUE)[,"x"])
#>     x
#> 1  NA
#> 2  NA
#> 3   4
#> 4  NA
#> 5  NA
#> 6   5
#> 7  71
#> 8   3
#> 9  NA
#> 10 NA

d.b答案是有效的答案。