我有一个数据框,已经有df许多列数据.我有一个矢量namevector,充满了字符串.我需要添加空列df以及列的名称namevector.
我试图用这个for循环添加列,迭代每个字符串namevector.
for (i in length(namevector)) {
df[, i] <- NA
}
Run Code Online (Sandbox Code Playgroud)
但是我留下了这个错误:
Run Code Online (Sandbox Code Playgroud)Error in `[<-.data.frame`(`*tmp*`, , i, value = NA) : new columns would leave holes after existing columns
或者,我曾想过用正确的名称创建一个空数据帧,然后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)
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)