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

在R中如何用单个filter()函数按因子级别与日期范围过滤行

单个filter()实现多条件组合过滤的解决方案

原始数据

假设我们有如下R DataFrame df:

# 数据结构与内容
df <- structure(list(
  code = factor(c("01", "01", "01", "01", "02", "02", "02", "02")),
  date = as.Date(c("2000-01-01", "2005-01-01", "2010-01-01", "2015-01-01", 
                   "2000-01-01", "2005-01-01", "2010-01-01", "2015-01-01")),
  value = c(23, 435, 1000, 65, 2, 50000, 3243, 6473)
), class = "data.frame")

需求说明

需要过滤掉两类行:

  • code为"01"且date≤"2010-01-01"的行
  • code为"02"且date>"2010-01-01"的行
    保留剩余数据,最终结果如下:
# 预期结果
#   code       date value
# 1   01 2015-01-01    65
# 2   02 2000-01-01     2
# 3   02 2005-01-01 50000
# 4   02 2010-01-01  3243

简洁解决方案:单个filter()实现

无需拆分合并,直接在filter()中组合正向保留条件即可,把拆分筛选的两个条件用|(或)连接:

df_filtered <- df |>
  filter(
    (code == "01" & date > "2010-01-01") | 
    (code == "02" & date <= "2010-01-01")
  )

也可以用反向取反逻辑,直接排除需要过滤的行,结果完全一致:

df_filtered <- df |>
  filter(
    !((code == "01" & date <= "2010-01-01") | 
      (code == "02" & date > "2010-01-01"))
  )

两种写法都能在单个filter()调用中完成需求,避免拆分合并的冗余操作。

内容的提问来源于stack exchange,提问作者johnny_gillette

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 07:03:29