我试图通过使用varnames列表对数据帧进行子集化来删除数据框列,但是我收到错误:
stones<-grep("^stat\\.mineBlock\\.minecraft\\.[a-zA-Z0-9]*?stone[a-zA-Z0-9]*?", colnames(ingame), value=TRUE, ignore.case=T, perl=T)
stones<-lapply(stones, function(x) get(x))
out<-subset(out,select=-c(stones))
运行上面的第1行后的值:
> stones
[1] "stat.mineBlock.minecraft.sandstone" "stat.mineBlock.minecraft.stone" "stat.mineBlock.minecraft.cobblestone" "stat.mineBlock.minecraft.cobblestone_wall"
[5] "stat.mineBlock.minecraft.stone_slab" "stat.mineBlock.minecraft.redstone_ore" "stat.mineBlock.minecraft.stone_stairs" "stat.mineBlock.minecraft.glowstone"
第3行出错:
> out<-subset(out,select=-c(stones))
Error in -c(stones) : invalid argument to unary operator
答案 0 :(得分:0)
不允许在字符值上使用一元运算符-
。
但你可以使用%in%
out[, !names(out) %in% stones]
您甚至可以使用!names(out) %in% stones
作为select
的参数,但由于缺乏可重复的示例,我不确定。例如,这有效:
subset(mtcars, select = !names(mtcars) %in% "mpg")
但通常使用[
子集更加安全。