为新列中的单行赋值

  • 本文关键字:赋值 单行 新列中 r
  • 更新时间 :
  • 英文 :


>问题

我正在尝试将新的数据列附加到现有数据帧。数据帧由多行和多列组成,我尝试追加的数据只是一行,应将其添加到现有数据帧的第一行。

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()没有成功,所以我想出了这个循环,但也没有成功。我不知道我在哪里犯了错误。

也许

最好的方法是创建一个与data行数相同的新dataframe,第一行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>

我找到的最干净的解决方案:

生成 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)

最新更新