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

如何使用dplyr::filter_at结合多谓词表达式实现复合过滤?

合并两次filter_at的方法

其实你完全可以把两个条件合并到一次filter_at调用里,核心思路是在all_vars()里用逻辑与(&)把两个判断条件组合起来,这样就能同时满足「变量非缺失」和「变量等于1」的要求啦。

合并后的代码示例

假设你的tibble叫df,合并后的写法是:

library(dplyr)

df %>%
  filter_at(vars(g1, g2), all_vars(!is.na(.) & . == 1))

补充:更推荐的现代写法

另外,filter_at属于dplyr里相对旧的语法,现在更推荐用across()函数来实现相同功能,代码可读性更强:

df %>%
  filter(across(c(g1, g2), ~ !is.na(.) & . == 1))

额外小提示

其实当你判断. == 1的时候,R会自动把NA值的行过滤掉(因为NA == 1的结果是NA,而filter()会默认移除结果为NA的行),所以如果你的场景里只要g1和g2都等于1就足够,甚至可以简化成:

df %>%
  filter(across(c(g1, g2), ~ . == 1))

这样就一次性完成了原来两次filter_at的工作,是不是更简洁?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:00:25