我有一个看起来像这样的数据集,除了它更长并且具有更多值:
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")
实际数据集非常长,需要删除数百个值,因此一个接一个地删除值将非常耗时。
我有一个看起来像这样的数据集,除了它更长并且具有更多值:
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")
实际数据集非常长,需要删除数百个值,因此一个接一个地删除值将非常耗时。
尝试:
dataset[!(dataset$grps %in% remove),]
还有subset
:
subset(dataset, !(grps %in% remove))
...这实际上只是一个包装器,当有多个子集标准时,[
它可以让您一遍又一遍地跳过写入。dataset$
但是,正如帮助页面警告的那样:
这是一个旨在以交互方式使用的便利功能。对于编程,最好使用像“[”这样的标准子集函数,特别是参数“子集”的非标准评估可能会产生意想不到的后果。
我从来没有遇到过任何问题,但是我的大部分 R 代码都是我自己使用的脚本,输入相对静态。
2013-04-12
我现在遇到了问题。如果您正在为 CRAN 构建一个包,R CMD check
如果您在代码中以这种方式使用,则会抛出一个注释subset
- 它会想知道是否grps
是一个全局变量,即使subset
是在 的环境中评估它dataset
(而不是全局变量)。因此,如果有任何可能您的代码最终会出现在一个包中,并且您对 NOTEs 感到不安,请坚持使用 Rcoster 的方法。