如何使用tidyverse按组获取事件的最大计数?
优化方案
针对你的需求,这里提供几种更简洁且符合tidyverse官方推荐的实现方式:
方法一:count() + slice_max()(保留数据框结构)
df %>% count(id) %>% slice_max(n, n = 1, with_ties = FALSE)
count(id)直接按id分组统计观测数,替代了原代码中group_by() + mutate(n())的冗余操作slice_max(n, n = 1, with_ties = FALSE)按官方推荐的方式提取计数最大的行,with_ties=FALSE确保仅返回一条结果(若存在多个id计数相同,也只取第一个)
如果只需要提取最大计数的数值,可追加pull(n):
df %>% count(id) %>% slice_max(n, n = 1, with_ties = FALSE) %>% pull(n)
方法二:count() + summarize()(直接返回最大计数值)
如果不需要保留分组信息,仅需得到最大计数的数值,这个方式更简洁:
df %>% count(id) %>% summarize(max_count = max(n))
对比原代码的优势
- 避免了
ungroup()、select(count)这类多余步骤 - 完全使用tidyverse官方推荐的函数(用
slice_max()替代已被软弃用的top_n()) - 逻辑更清晰,从分组计数到提取最大值一步到位
内容的提问来源于stack exchange,提问作者mtnrambler
相关产品推荐
相关产品推荐

