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

使用dplyr/tidyverse按指定列及条件筛选数据集的问题求助

解决dplyr条件子集化的问题

你遇到的问题是因为filter_at这类旧版范围动词(scoped verbs)在新版dplyr中已被更灵活的if_all()、if_any()替代,直接使用旧语法可能出现异常。以下是对应需求的正确写法:

1. 替代filter_at(vars(starts_with("x")), all_vars(. < 10))

要保留所有以x开头的列都小于10的行,使用if_all()结合filter():

filter(your_data, if_all(starts_with("x"), ~ .x < 10))

2. 替代filter_at(vars(starts_with("x")), any_vars(. < 10))

要保留至少一个以x开头的列小于10的行,使用if_any()结合filter():

filter(your_data, if_any(starts_with("x"), ~ .x < 10))

补充说明

  • 新版dplyr(1.0.0及以上)推荐使用if_all()/if_any()替代旧的_if/_at/_all系列函数,新语法更统一,兼容性更强。
  • 若坚持使用旧语法,需确保dplyr版本低于1.0.0,但不推荐这种做法——旧函数已被标记为弃用,后续版本可能彻底移除。

举个实际例子验证效果:

library(tidyverse)
# 构造测试数据集
df <- tibble(x1 = c(5, 15, 8), x2 = c(7, 9, 12), y = c("a", "b", "c"))

# 保留所有x开头列都<10的行
filter(df, if_all(starts_with("x"), ~ .x < 10))
# 结果仅保留第一行

# 保留至少一个x开头列<10的行
filter(df, if_any(starts_with("x"), ~ .x < 10))
# 结果保留全部三行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 13:00:46