1

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

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")

实际数据集非常长,需要删除数百个值,因此一个接一个地删除值将非常耗时。

4

2 回答 2

4

尝试:

dataset[!(dataset$grps %in% remove),]
于 2013-03-06T19:18:39.637 回答
1

还有subset

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

...这实际上只是一个包装器,当有多个子集标准时,[它可以让您一遍又一遍地跳过写入。dataset$但是,正如帮助页面警告的那样:

这是一个旨在以交互方式使用的便利功能。对于编程,最好使用像“[”这样的标准子集函数,特别是参数“子集”的非标准评估可能会产生意想不到的后果。

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


2013-04-12

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

于 2013-03-06T20:36:00.697 回答