2017-10-15 51 views
0

问题分配值单列在新列

我想追加新的数据列到现有的数据帧。数据帧是多行和多列的常量,我试图追加的数据只有一行,它应该被添加到现有数据框的第一行。

data是一个有3000行和20列的数据帧,而a是一个有1行和12列的数据帧。

for (o in 1:length(a)) { 
    data[[1,(paste0(names(a)[o]))]]=a[o] 
} 

错误

在不存在柱

预期结果替换元件

我想获得一个数据帧有3000行和32列,最后12列缺少ot的值她的行,我打算一个接一个地填写。

我已经尝试...

append()cbind()merge()没有成功,所以我想出了这个循环,但要么没有成功。我无法弄清楚我犯了什么错误。

+0

欢迎来到StackOverflow!请阅读关于[如何提出一个好问题](http://stackoverflow.com/help/how-to-ask)以及如何给出[可重现的示例](http:// stackoverflow。COM /问题/ 5963269 /如何对化妆一个伟大-R-重复性,例如/ 5963610)。这会让其他人更容易帮助你。 – Jaap

回答

0

也许最好的方法是创建一个新的dataframe有相同数量的行为data,第一行为a,其他行丢失:

a_to_append <- rbind(a, matrix(NA, ncol = 12, nrow = 2999, dimnames = list(NULL, colnames(a)))) 

然后,简单地结合两个数据帧:

data_all <- cbind(data, a_to_append) 

> head(data_all) 
    X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 
1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 
3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 
4 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 
5 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 
6 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 
0

的干净的解决方案,我发现:

生成2数据帧:

df1 <- data.frame(x=c(1,2,3,4,5),y=c("a","b","c","d","e")) 
df2 <- data.frame(z="added1",w="added2") 

我们需要d2的列添加到d1和反之亦然。

df1.names <- names(df1) 
df1[,names(df2)] <- NA 
df2[,df1.names] <- NA 

由于df1不具有names(df2)列,第一条指令创建列,并指定他的所有值NAdf2相同。

最后,我们可以绑定两个数据帧:

df1 <- rbind(df2,df1) 

     z  w x y 
1 added1 added2 NA <NA> 
2 <NA> <NA> 1 a 
3 <NA> <NA> 2 b 
4 <NA> <NA> 3 c 
5 <NA> <NA> 4 d 
6 <NA> <NA> 5 e 

你的情况:

data.names <- names(data) 
data[,names(a)] <- NA 
a[,data.names] <- NA 

data <- rbind(data,a)