我是R语言的新手,想通过for循环删除多个列。
for (i in 15:ncol(DB)){
BD[,i]<- NULL
}
但是我一直收到这个错误提示:
Error in `[<-.data.frame`(`*tmp*`, , i, value = NULL) :
new columns would leave holes after existing columns
有人能解释一下为什么会发生这种情况吗?谢谢。
我是R语言的新手,想通过for循环删除多个列。
for (i in 15:ncol(DB)){
BD[,i]<- NULL
}
Error in `[<-.data.frame`(`*tmp*`, , i, value = NULL) :
new columns would leave holes after existing columns
for
循环来完成这个操作,只需使用list(NULL)
来(具有破坏性地)删除您想要删除的列。
示例:
mydf <- data.frame(matrix(1:20, ncol = 10))
mydf
# X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
# 1 1 3 5 7 9 11 13 15 17 19
# 2 2 4 6 8 10 12 14 16 18 20
mydf[4:7] <- list(NULL)
mydf
# X1 X2 X3 X8 X9 X10
# 1 1 3 5 15 17 19
# 2 2 4 6 16 18 20
虽然我不确定这是否是良好的编程风格,但您也可以使用负索引作为排除索引的简写,我经常这样做。
mydf <- data.frame(matrix(1:20, ncol = 10))
mydf
# X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
# 1 1 3 5 7 9 11 13 15 17 19
# 2 2 4 6 8 10 12 14 16 18 20
mydf[,-(4:7)] ## columns 4 through 7 are excluded
# X1 X2 X3 X8 X9 X10
# 1 1 3 5 15 17 19
# 2 2 4 6 16 18 20
如果您使用负索引,请注意操作顺序,因为:
比-
的优先级更高,因此-4:7
会得到
mydf[,-4:7]
# Error in .subset(x, j) : only 0's may be mixed with negative subscripts
BD<-BD[, 1:14]
。这将保留前14列,无需循环。 - MrFlick