You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 08:36:04