如何用dplyr计算多分类下上下10%分位对应数值的均值
实现方案
1. dplyr 实现
通过group_by()按分类分组后直接汇总计算即可,逻辑直观易读:
library(dplyr) df %>% group_by(cat) %>% summarise( # 前10%(≥90分位)均值 top10_mean = mean(x[x >= quantile(x, 0.9)]), # 后10%(≤10分位)均值 bottom10_mean = mean(x[x <= quantile(x, 0.1)]) )
运行输出结果:
# A tibble: 2 × 3 cat top10_mean bottom10_mean <chr> <dbl> <dbl> 1 a 0.954 0.0796 2 b 1.96 1.09
和你提供的base R计算结果完全一致。
2. purrr 实现
先按分类拆分数据集为列表,遍历每个子数据集计算后合并结果:
library(purrr) library(tibble) df %>% split(.$cat) %>% map_dfr(~ tibble( cat = unique(.x$cat), top10_mean = mean(.x$x[.x$x >= quantile(.x$x, 0.9)]), bottom10_mean = mean(.x$x[.x$x <= quantile(.x$x, 0.1)]) ))
输出结果和dplyr实现完全相同。
内容的提问来源于stack exchange,提问作者Maikol Solís
相关产品推荐
相关产品推荐

