按分组获取最值、中位数对应名称及总值的R语言数据处理需求
分组提取关联数值对应的字符串并汇总统计
原始数据
我们有如下tibble表格:
# A tibble: 6 x 3 Group Name Value <chr> <chr> <dbl> 1 VA John 2 2 VA James 6 3 VA Joe 3 4 NY Emily 6 5 NY Dave 3 6 NY Deb 4
需求说明
按Group字段分组,返回每组中:
Value最大值对应的Name(命名为Max)Value最小值对应的Name(命名为Min)Value中位数对应的Name(命名为Med)- 该组
Value的总和(命名为Total)
解决方案
使用dplyr包可以高效实现需求,代码如下:
library(dplyr) # 假设原始数据存储在original_df中 result_df <- original_df %>% group_by(Group) %>% summarize( Max = slice_max(Value, n = 1) %>% pull(Name), Min = slice_min(Value, n = 1) %>% pull(Name), Med = filter(Value == median(Value)) %>% pull(Name), Total = sum(Value) )
结果验证
运行代码后得到的结果与期望一致:
# A tibble: 2 x 5 Group Max Min Med Total <chr> <chr> <chr> <chr> <dbl> 1 VA James John Joe 11 2 NY Emily Dave Deb 12
代码说明
group_by(Group):按Group字段对数据分组slice_max(Value, n = 1):提取每组中Value最大的行,再通过pull(Name)获取对应的姓名slice_min(Value, n = 1):同理提取每组Value最小对应的姓名filter(Value == median(Value)):筛选出Value等于该组中位数的行,再提取姓名;由于每组数据量为3,中位数唯一,无需处理多值情况sum(Value):计算每组Value的总和
内容的提问来源于stack exchange,提问作者Jimmy Cloutier
相关产品推荐
相关产品推荐

