使用dplyr计算mtcars分组下mpg5-95分位数区间统计量并输出长格式
解决方法
首先修正你原有代码中min统计值的计算错误(误写为mean(mpg)),你可以通过两种方式实现单次管道操作输出长格式结果:
方法1:仅使用dplyr实现(无需额外加载其他包,推荐)
利用dplyr 1.0.0及以上版本支持的reframe()函数直接生成长格式结果:
library(dplyr) mtcars %>% group_by(cyl, am) %>% filter(mpg >= quantile(mpg, 0.05) & mpg <= quantile(mpg, 0.95)) %>% reframe( varType = c("mean", "max", "min", "sd"), mpg = c(mean(mpg), max(mpg), min(mpg), sd(mpg)) )
方法2:dplyr结合tidyr实现
先计算宽格式统计值,再用pivot_longer()转长格式:
library(dplyr) library(tidyr) mtcars %>% group_by(cyl, am) %>% filter(mpg >= quantile(mpg, 0.05) & mpg <= quantile(mpg, 0.95)) %>% summarise( mean = mean(mpg), max = max(mpg), min = min(mpg), sd = sd(mpg) ) %>% pivot_longer( cols = c(mean, max, min, sd), names_to = "varType", values_to = "mpg" )
两种方式输出的结果都完全匹配你给出的预期格式。
内容的提问来源于stack exchange,提问作者Leprechault
相关产品推荐
相关产品推荐

