2013-10-24 86 views
0

我想编写一个R函数来将许多0向量插入到已存在的data.frame中。下面是例如:根据两个数据帧的colnames的联合插入新列

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 

基于两大colnames(即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 

在此先感谢。

回答

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] 
+0

OP显然希望添加的列填充0。 –

+0

啊,phooey。我不应该在这个时候回答。让我解决它,谢谢。 – TheComeOnMan

+0

非常感谢!它运作良好。还有一个问题,如果row.numbers对于两个data.frames不同,有没有简单的方法来设置df1part和df2part的row.number?谢谢! – Jiang