问题
我正在尝试将新数据列附加到现有数据框。多行和多列的数据帧常量,我试图追加的数据只是一行,应该添加到现有数据帧的第一行。
data
是一个包含3000行和20列的数据框,a
是一个包含1行和12列的数据框。
for (o in 1:length(a)) {
data[[1,(paste0(names(a)[o]))]]=a[o]
}
错误
替换不存在的列中的元素
预期结果
我想获得一个包含3000行和32列的数据帧,其中最后12列是其他行的缺失值,我打算稍后逐一填充。
我已经尝试过了......
append()
,cbind()
,merge()
没有成功,所以我想出了这个循环,但也没有成功。我无法弄清楚我在哪里弄错了。
答案 0 :(得分: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)
列,因此第一条指令会创建列并将其所有值分配给NA
。同样适用于df2
。
最后,我们可以绑定两个数据框:
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)
答案 1 :(得分: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>