我有一个看起来像这样的数据集,除了它更长并且有更多值:
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")
实际数据集非常长,需要删除数百个值,因此逐个删除值会非常耗时。
答案 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的方法。