合并 2 个具有重复列的数据框?
Merging 2 dataframes with duplicate columns?
我有一个空数据框:
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 的实现。
有没有更有效的方法来完成这个?
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
我们可以根据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 答案是有效的。
我有一个空数据框:
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 的实现。
有没有更有效的方法来完成这个?
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
我们可以根据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 答案是有效的。