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

如何基于分组值格式化列?按规则筛选DataFrame分组类别

解决方案

可以使用dplyr包实现需求,核心逻辑是按名称分组后,优先保留Special类别;若无Special,则保留Number值最大的记录:

方法一:排序取首行

先给行设置优先级(Special优先级最高,其余按Number降序),再每组取第一行:

library(dplyr)

# 处理数据
df_result <- df %>%
  group_by(Name) %>%
  # 排序规则:Special行排在最前,其余按Number从大到小排序
  arrange(desc(Category == "Special"), desc(Number)) %>%
  # 提取每组第一行
  slice_head(n = 1) %>%
  ungroup()

# 查看结果
df_result

运行后输出结果:

# A tibble: 3 × 3
  Name    Category   Number
  <chr>   <chr>       <int>
1 Name A  Category 1     10
2 Name B  Category 2     20
3 Name C  Special         4

方法二:条件筛选

直接在分组内判断是否存在Special,针对性筛选目标行:

library(dplyr)

df_result <- df %>%
  group_by(Name) %>%
  filter(
    # 组内有Special则筛选该行,否则筛选Number最大的行
    if (any(Category == "Special")) Category == "Special" else Number == max(Number)
  ) %>%
  ungroup()

两种方法均可得到符合要求的结果,按需选择即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:12:55