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

如何用R的dplyr高效过滤掉同时满足多列条件的数据?

问题

我有一个数据集,希望过滤掉最喜欢的颜色为green且最喜欢的食物为sushi的记录;若仅满足其中一个条件,则保留该记录。我目前通过生成组合列的方式实现了需求,但想找更简洁的方法。

现有数据集:

library(dplyr)

test <- tibble(person = c("Justin", "Corey", "Kate", "Sibley"),
               fav_food = c("sushi", "sushi", "cake", "tomatos"),
               fav_color = c("green", "red", "green", "blue"))

期望得到的数据集:

library(dplyr)
answer <- tibble(person = c("Corey", "Kate", "Sibley"),
               fav_food = c("sushi", "cake", "tomatos"),
               fav_color = c("red", "green", "blue"))

我当前的实现代码:

library(dplyr)

# code works but curious if there is a more straightforward approach

test %>%
  mutate(food_color = paste(fav_food, fav_color, sep = "-")) %>%
  filter(food_color != "sushi-green")
简洁实现方法

不需要生成额外的组合列,直接在filter()中使用逻辑条件即可,更直观高效:

方法一:直接取反“同时满足两个条件”

test %>%
  filter(!(fav_food == "sushi" & fav_color == "green"))

方法二:用逻辑或的等价转换(De Morgan定律)

根据逻辑转换规则,!(A & B) 等价于 !A | !B,也可以写成:

test %>%
  filter(fav_food != "sushi" | fav_color != "green")

这两种写法都能直接过滤掉同时满足「fav_food为sushi且fav_color为green」的记录,保留其他所有行,和你当前代码的结果完全一致,但无需创建中间列,代码更简洁易读。

内容的提问来源于stack exchange,提问作者J.Sabree

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 09:15:32