R dplyr分组统计频数占比后提取每组Freq_left最高的前2行实现方法
问题解决方案
调整逻辑如下:
- 原生
slice_max()默认参数n=1,仅返回每组最高值对应的1条记录,手动指定n=2即可取每组前2条 - 原有代码中占比计算的
nrow(.)写法在不同dplyr版本存在歧义,建议提前存储全量样本数避免计算错误
修正后代码:
library(dplyr) # 提前存储总样本数,用于占比计算 total_row <- nrow(df) df %>% group_by(node, left) %>% summarise( Freq_left = n(), Prop_left = round(Freq_left / total_row * 100, 1) ) %>% # 按node分组取Freq_left最高的前2条 slice_max(Freq_left, n = 2)
运行输出和期望结果完全一致:
# A tibble: 4 × 4 # Groups: node [2] node left Freq_left Prop_left <chr> <chr> <int> <dbl> 1 A ab 4 30.8 2 A cc 2 15.4 3 B xx 3 23.1 4 B zz 2 15.4
内容的提问来源于stack exchange,提问作者Chris Ruehlemann
相关产品推荐
相关产品推荐

