根据这些值的向量从数据集中删除值

时间:2013-03-06 19:16:08

标签: r

我有一个看起来像这样的数据集,除了它更长并且有更多值:

dataset <- data.frame(grps = c("a","b","c","a","d","b","c","a","d","b","c","a"), response = c(1,4,2,6,4,7,8,9,4,5,0,3))

在R中,我想使用要删除的值向量删除包含值“b”或“c”的所有行,即

remove<-c("b","c")

实际数据集非常长,需要删除数百个值,因此逐个删除值会非常耗时。

2 个答案:

答案 0 :(得分:4)

尝试:

dataset[!(dataset$grps %in% remove),]

答案 1 :(得分:1)

还有subset

subset(dataset, !(grps %in% remove))

...这实际上只是[的一个包装器,它允许您在有多个子集标准时反复编写dataset$。但是,正如帮助页面警告:

  

这是一种便于交互使用的便利功能。对于   编程最好使用标准的子集函数   '[',特别是对论证的非标准评价   “子集”可能会产生意想不到的后果。

我从来没有遇到任何问题,但我的大部分R代码都是使用相对静态的输入编写脚本。


2013年4月12日

我现在遇到了问题。如果您正在为CRAN构建一个包,R CMD check将在您的代码中以这种方式使用subset时抛出一个注释 - 它会想知道grps是否是全局变量,甚至虽然subset正在dataset的环境中评估它(不是全局的)。因此,如果有任何可能性,您的代码将最终出现在软件包中,并且您对NOTEs感到娇气,请坚持使用Rcoster的方法。