R语言:按年度将数据框分十分位并计算均值与中位数问题
解决方法
你的问题出在没有按年度分组计算十分位,原来的ntile(value,10)是对整个数据集的value分十分位,而非每年单独划分。以下是两种正确的实现方式:
1. 使用dplyr实现
library(dplyr) # 先按年度分组,在每组内计算十分位,再按年度+十分位聚合统计 result_dplyr <- df %>% group_by(Year) %>% mutate(quantile = ntile(value, 10)) %>% ungroup() %>% group_by(Year, quantile) %>% summarise( mean_value = mean(value), median_value = median(value), .groups = "drop" ) print(result_dplyr)
2. 使用data.table实现
library(data.table) setDT(df) # 转换为data.table后,先按Year分组生成十分位,再分组计算统计量 result_dt <- df[, .(Category, value, quantile = ntile(value, 10)), by = Year][ , .(mean_value = mean(value), median_value = median(value)), by = .(Year, quantile) ] print(result_dt)
两种方法都会生成目标数据框:每行对应年度+十分位的组合,包含该组的value均值和中位数。
内容的提问来源于stack exchange,提问作者Ayoze Alfageme
相关产品推荐
相关产品推荐

