根据两个数据框的colnames的并集插入新列

时间:2013-10-24 23:16:26

标签: r dataframe

我想编写一个R函数,将许多0个向量插入到现有的data.frame中。这是一个例子:

Data.frame 1
    A   B   C   D
1   1   3   4   5
2   4   5   6   7
3   4   5   6   2
4   4   55  2   3

Data.frame 2
    A   B   E   X
11  5   1   5   5
22  44  55  9   6
33  12  4   2   4
44  9   7   4   2

基于两个同名的联合(即A,B,C,D,E,X),我想更新两个数据框,如:

Data.frame 1 (new)

    A   B   C   D   E   X
1   1   3   4   5   0   0
2   4   5   6   7   0   0
3   4   5   6   2   0   0
4   4   55  2   3   0   0

Data.frame 2 (new)

    A   B   C   D   E   X
11  5   1   0   0   5   5
22  44  55  0   0   9   6
33  12  4   0   0   2   4
44  9   7   0   0   4   2

提前致谢。

1 个答案:

答案 0 :(得分:3)

选项1(感谢@Jilber编辑)

我假设列的顺序无关紧要 -

df2part <- subset(df2,select = setdiff(colnames(df2),colnames(df1)))*0
df1f <- cbind(df1,df2part)
df1part <- subset(df1,select = setdiff(colnames(df1),colnames(df2)))*0
df2f <- cbind(df2,df1part)

如果订单真的很重要,那么只需重新排序列

df2f <- df2f[, sort(names(df2f))]

输出

> df1f
  A  B C D E X
1 1  3 4 5 0 0
2 4  5 6 7 0 0
3 4  5 6 2 0 0
4 4 55 2 3 0 0
> df2f
    A  B C D E X
11  5  1 0 0 5 5
22 44 55 0 0 9 6
33 12  4 0 0 2 4
44  9  7 0 0 4 2

选项2 -

library(data.table)
df1 <- data.table(df1)
df2 <- data.table(df2)

df1names <- colnames(df1)
df2names <- colnames(df2)
df1[,setdiff(df2names,df1names) := 0]
df2[,setdiff(df1names,df2names) := 0]