在R中按分组计算CountC四分位数并将宽表转为指定长表格式
解决方案
你原有代码存在两个问题:
- 分组汇总时调用
df$CountC会读取全表的CountC列,忽略分组逻辑,导致计算的是全局分位数而非分组内分位数,结果不符合预期 - 要生成长表不需要先计算为宽表再转换,直接使用dplyr的
reframe函数(支持分组后返回多行结果)即可一步得到目标格式。
最优代码(dplyr 1.0.0及以上版本适用)
library(dplyr) q <- c(0.25, 0.5, 0.75) quartileDFbyGroup <- df %>% group_by(Group) %>% reframe( Proba = q, Value = quantile(CountC, probs = q) )
运行上述代码直接得到你需要的长表格式结果,若分位数计算结果和你预期的示例有差异,可以通过调整quantile函数的type参数适配不同的分位数计算规则。
旧版本dplyr兼容方案
如果你使用的dplyr版本不支持reframe,可以先计算宽表再用tidyr转长:
library(dplyr) library(tidyr) q <- c(0.25, 0.5, 0.75) quartileDFbyGroup <- df %>% group_by(Group) %>% summarize( quant25 = quantile(CountC, probs = q[1]), quant50 = quantile(CountC, probs = q[2]), quant75 = quantile(CountC, probs = q[3]) ) %>% pivot_longer(cols = starts_with("quant"), names_to = NULL, values_to = "Value") %>% mutate(Proba = rep(q, n()/length(q))) %>% select(Proba, Value, Group)
内容的提问来源于stack exchange,提问作者HelpASisterOut
相关产品推荐
相关产品推荐

