gpt4 book ai didi

r - 如何添加列名相同的数据框

转载 作者:行者123 更新时间:2023-12-02 08:22:00 25 4
gpt4 key购买 nike

我有两个数据框 df1df2。我想创建一个新的数据框 df3,它只是 df1df2 的总和,其中列名相同。

df1 <- data.frame(x1=c(1,4,5),x2=c(5,6,7),x3=c(9,9,10))
df2 <- data.frame(x1=c(1,6,3),x2=c(4,3,1),x3=c(5,4,6),x4=c(7,6,7))

df1
x1 x2 x3
1 1 5 9
2 4 6 9
3 5 7 10

df2
x1 x2 x3 x4
1 1 4 5 7
2 6 3 4 6
3 3 1 6 7

df3
x1 x2 x3 x4
1 2 9 14 7
2 10 9 13 6
3 8 8 16 7

最佳答案

我们发现在“df1”和“df2”(“nm1”)中通用的列名。创建“df2”(“df3”)的副本。添加数据集的子集(df1[nm1]df2[nm1])并将其分配给“df3”的相应子集。

nm1 <- intersect(names(df1), names(df2))
df3 <- df2
df3[nm1] <- df1[nm1]+df2[nm1]
df3
# x1 x2 x3 x4
#1 2 9 14 7
#2 10 9 13 6
#3 8 8 16 7

如果“df1”中有其他不在“df2”中的唯一列,反之亦然,一种选择是将数据集放在 list 中, 然后 rbind他们与rbindlist (来自 data.table ),创建一个序列列('N')并使用 lapply得到sum每一列。

library(data.table)
rbindlist(list(df1, df2), fill=TRUE, idcol=TRUE)[,
N:= 1:.N, .id][,lapply(.SD, sum, na.rm=TRUE) ,
by = N , .SDcols=x1:x4][, N:= NULL][]
# x1 x2 x3 x4
#1: 2 9 14 7
#2: 10 9 13 6
#3: 8 8 16 7

关于r - 如何添加列名相同的数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36245392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com