我有一个数据框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
将两个数据帧放在一起,但我不确定如何编写此代码。
我将如何解决这个问题?
答案 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