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

如何在R数据框中汇总行并保留分组变量第二次出现的字符值?

用dplyr实现分组求和并保留指定字符值

针对你的需求——按Season分组,对Number列求和,同时保留每个分组中第二次出现的Character值(分组仅一行时保留该行值),可以用以下两种dplyr方案解决:

首先确保加载dplyr包:

library(dplyr)

方案一:直接在summarize中指定提取规则

通过判断分组内的行数,明确Character的取值逻辑:

df %>%
  group_by(Season) %>%
  summarize(
    Number = sum(Number),
    # 分组有2行及以上取第2个值,只有1行就取唯一值
    Character = ifelse(n() >= 2, nth(Character, 2), first(Character))
  ) %>%
  ungroup()

方案二:先算总和再取目标行

考虑到你示例中第二次出现的行正好是分组的最后一行,也可以先计算组内Number的总和,再提取每个分组的最后一行:

df %>%
  group_by(Season) %>%
  mutate(Number_total = sum(Number)) %>%
  slice_tail(n = 1) %>% # 取分组最后一行
  select(Season, Number = Number_total, Character) %>%
  ungroup()

运行任意一种方案后,都会得到符合预期的结果:

Season Number Character
  <chr>   <dbl> <chr>     
1 Fall        4 s         
2 Summer      1 1s        
3 Spring      9 q         
4 Winter      6 1s        

如果需要和你示例完全一致的行顺序,可在末尾加上arrange(match(Season, c("Summer", "Fall", "Winter", "Spring")))调整顺序。

之前用summarize处理非数值列出问题,是因为默认情况下summarize需要明确的聚合规则,上面的方法通过指定Character的提取逻辑,完美解决了这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 03:05:40