R语言如何基于多列复合条件正确筛选数据集?
你现有代码的逻辑是仅保留同时满足「年龄处于611、性别为M、得分处于34100」三个条件的行,会过滤掉其余所有行,和你要求的筛选规则不符。你需要实现的规则是:仅对「性别为M且年龄在6~11区间」的行附加得分限制,其余行直接保留,调整逻辑表达式即可。
正确写法
基于subset的实现
library(dplyr) # between函数来自dplyr包,需提前加载 Df0 <- subset(Df0, !(Sex == "M" & between(Age, 6, 11)) | between(Score, 34, 100) )
如果希望逻辑更直观,也可以用ifelse写法:
Df0 <- subset(Df0, ifelse(Sex == "M" & between(Age, 6, 11), between(Score, 34, 100), TRUE) )
更常用的dplyr::filter实现
library(dplyr) Df0 <- Df0 %>% filter( !(Sex == "M" & between(Age, 6, 11)) | between(Score, 34, 100) )
逻辑说明
上述筛选条件可以拆解为两类可保留的行:
- 不属于「性别为M且年龄在6~11」的行,无需校验得分直接保留
- 属于「性别为M且年龄在611」的行,得分需要处于34100区间才保留
按上述逻辑处理后,ID为4的行因为符合「性别M+年龄在6~11」但得分33不符合要求,会被过滤,和你预期的输出结果一致。
内容的提问来源于stack exchange,提问作者Science11
相关产品推荐
相关产品推荐

