将字符转换为子集的var名称

时间:2015-05-22 00:34:18

标签: r dataframe

我试图通过使用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

1 个答案:

答案 0 :(得分:0)

不允许在字符值上使用一元运算符-

但你可以使用%in%

的逻辑否定
out[, !names(out) %in% stones]

您甚至可以使用!names(out) %in% stones作为select的参数,但由于缺乏可重复的示例,我不确定。例如,这有效:

subset(mtcars, select = !names(mtcars) %in% "mpg")

但通常使用[子集更加安全。