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

如何在分组内匹配行并过滤不一致行?R语言数据处理需求

R 分组数据处理解决方案

示例输入数据

df <- structure(list(grp = c("1", "1", "2", "2", "3", "3"), 
                     view = c("A", "B", "A", "B", "A", "B"), 
                     type = c("Y", "N", "Y", "Y", "N", "N")), 
                class = "data.frame", row.names = c(NA, -6L))

处理代码(基于dplyr)

library(dplyr)

result_df <- df %>%
  group_by(grp) %>%
  # 标记分组内type是否全部一致
  mutate(type_match = n_distinct(type) == 1) %>%
  # 按规则筛选行:不匹配则留Y,匹配则保留所有行
  filter(ifelse(!type_match, type == "Y", TRUE)) %>%
  # 保留每个分组中view为A的行(对应期望输出要求)
  filter(view == "A") %>%
  ungroup() %>%
  # 移除辅助标记列
  select(-type_match)

输出结果

运行代码后得到的结果与预期一致:

> result_df
# A tibble: 3 × 3
  grp   view  type 
  <chr> <chr> <chr>
1 1     A     Y    
2 2     A     Y    
3 3     A     N    

对应的结构为:

structure(list(grp = c("1", "2", "3"), view = c("A", "A", "A"), 
               type = c("Y", "Y", "N")), class = "data.frame", row.names = c(NA, -3L))

逻辑说明

  1. 分组标记:通过n_distinct(type)判断每个分组内的type是否只有一种取值,生成type_match辅助列
  2. 条件筛选:根据type_match的值执行筛选逻辑:分组内type不匹配时仅保留type = Y的行;匹配时保留所有行
  3. 统一视图:按照期望输出要求,保留每个分组中view = A的行
  4. 清理输出:取消分组并移除辅助列,得到最终结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 18:12:36