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

如何用R(含dplyr)筛选数据框:保留B组与A组匹配的行

使用dplyr实现指定数据筛选需求

当然可以用dplyr完成这个筛选任务,下面是两种高效的实现方式,附示例代码:

1. 构造示例数据

library(dplyr)

# 模拟你的数据集
df <- tibble(
  group = c("A", "A", "A", "B", "B", "B", "B", "B"),
  number = c(1, 2, 3, 1, 2, 4, 3, 5),
  animal = c("cat", "dog", "bird", "cat", "dog", "fish", "bird", "fox")
)

2. 实现方式一:拆分筛选后合并

这种方式逻辑直观,先单独保留A组所有行,再筛选出B组中与A组number+animal匹配的行,最后合并结果:

filtered_df <- df %>%
  # 保留所有A组数据
  filter(group == "A") %>%
  # 追加符合条件的B组数据
  bind_rows(
    df %>%
      filter(group == "B") %>%
      # 仅保留与A组number和animal同时匹配的行
      semi_join(df %>% filter(group == "A"), by = c("number", "animal"))
  )

3. 实现方式二:单步筛选

通过一次filter操作完成,利用逻辑条件直接判断:

# 先提取A组的number-animal唯一匹配组合
a_matches <- df %>%
  filter(group == "A") %>%
  select(number, animal) %>%
  distinct()

filtered_df <- df %>%
  filter(
    # 保留所有A组行
    group == "A" |
    # B组行需满足number和animal同时在A组的匹配组合中
    (group == "B" & inner_join(., a_matches, by = c("number", "animal")) %>% complete.cases())
  )

两种方法都能达到你的需求:保留A组全部行,仅保留B组中number和animal同时与A组某行匹配的记录,自动移除不符合条件的行(比如示例中的最后两行)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 14:52:16