将空列添加到具有向量中指定名称的数据框

时间:2013-08-13 16:28:40

标签: r dataframe

我有一个数据框df,已经有许多列数据。我有一个充满字符串的向量namevector。我需要在df添加空列,其中包含namevector列的名称。

我正在尝试使用此for循环添加列,迭代namevector中的每个字符串。

for (i in length(namevector)) {
  df[, i] <- NA
}

但是留下了这个错误:

Error in `[<-.data.frame`(`*tmp*`, , i, value = NA) : 
  new columns would leave holes after existing columns

或者,我考虑过创建一个具有正确名称的空数据帧,然后cbind将两个数据帧放在一起,但我不确定如何编写此代码。

我将如何解决这个问题?

5 个答案:

答案 0 :(得分:48)

问题与您的代码在一行:

for(i in length(namevector))

你需要问问自己:length(namevector)是什么?这是一个数字。所以基本上你说的是:

for(i in 11)
df[,i] <- NA

或更简单:

df[,11] <- NA

那是您收到错误的原因。你想要的是:

for(i in namevector)
    df[,i] <- NA

或更简单:

df[,namevector] <- NA

答案 1 :(得分:18)

set.seed(1)
example <- data.frame(col1 = rnorm(10, 0, 1), col2 = rnorm(10, 2, 3))
namevector <- c("col3", "col4")
example[ , namevector] <- NA

example
#          col1       col2 col3 col4
# 1  -0.6264538  6.5353435   NA   NA
# 2   0.1836433  3.1695297   NA   NA
# 3  -0.8356286  0.1362783   NA   NA
# 4   1.5952808 -4.6440997   NA   NA
# 5   0.3295078  5.3747928   NA   NA
# 6  -0.8204684  1.8651992   NA   NA
# 7   0.4874291  1.9514292   NA   NA
# 8   0.7383247  4.8315086   NA   NA
# 9   0.5757814  4.4636636   NA   NA
# 10 -0.3053884  3.7817040   NA   NA

答案 2 :(得分:8)

以下适用于我

dataframe[,"newName"] <- NA

确保为新名称字符串添加""

答案 3 :(得分:-1)

也许

df <- do.call("cbind", list(df, rep(list(NA),length(namevector))))
colnames(df)[-1*(1:(ncol(df) - length(namevector)))] <- namevector

答案 4 :(得分:-1)

或者像这样:

dataframe$newName1 <- dataframe$newName2 <-NA