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

use*_*296 37 r dataframe

我有一个数据框,已经有df许多列数据.我有一个矢量namevector,充满了字符串.我需要添加空列df以及列的名称namevector.

我试图用这个for循环添加列,迭代每个字符串namevector.

for (i in length(namevector)) {
  df[, i] <- NA
}
Run Code Online (Sandbox Code Playgroud)

但是我留下了这个错误:

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

或者,我曾想过用正确的名称创建一个空数据帧,然后cbind将两个数据帧放在一起,但我不知道如何编写这个.

我该如何解决这个问题?

Señ*_*r O 54

问题与您的代码是在该行:

for(i in length(namevector))
Run Code Online (Sandbox Code Playgroud)

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

for(i in 11)
df[,i] <- NA
Run Code Online (Sandbox Code Playgroud)

或者更简单:

df[,11] <- NA
Run Code Online (Sandbox Code Playgroud)

就是你收到错误原因.你想要的是:

for(i in namevector)
    df[,i] <- NA
Run Code Online (Sandbox Code Playgroud)

或者更简单:

df[,namevector] <- NA
Run Code Online (Sandbox Code Playgroud)

  • 请考虑将 `df[,namevector] &lt;- NA` 移至答案的顶部,因为这是通用解决方案 (3认同)

day*_*yne 21

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
Run Code Online (Sandbox Code Playgroud)

  • 只添加了`set.seed`,因此如果用户运行代码,示例data.frame将是相同的.从技术上讲,"rnorm"根本不是必需的. (3认同)

小智 9

以下对我有用

dataframe[,"newName"] <- NA
Run Code Online (Sandbox Code Playgroud)

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