R语言ddply分组统计异常:求各帮派Mass的均值、最值
解决帮派体重统计结果一致的问题
嘿,我一眼就瞅出问题所在啦!
你提前把mass <- Gangs$Mass_kg赋值成了整个数据集的Mass_kg列,这是一个全局向量。当ddply按Gang_affiliation分组计算时,summarise里调用的min(mass)、mean(mass)并没有使用每个帮派分组后的体重子集,而是一直用整个列的统计值,所以所有帮派的结果才会完全相同。
两种修正方案
方案1:直接引用原数据列(最简洁推荐)
删掉提前赋值的mass变量,直接在summarise里用数据框的Mass_kg列,ddply会自动按分组处理每个帮派的体重数据:
# 直接使用原数据列,自动分组计算 mass.summary <- ddply(Gangs, ~Gang_affiliation, summarise, minimum = min(Mass_kg, na.rm = TRUE), mean = mean(Mass_kg, na.rm = TRUE), maximum = max(Mass_kg, na.rm = TRUE))
小贴士:加上na.rm = TRUE能避免数据里有缺失值时计算报错,要是你的数据没缺失值可以省略,但加上更稳妥~
方案2:在分组内定义局部变量
如果你非要用mass这个变量名,可以在ddply的分组函数里先给每个组单独赋值mass,这样每个帮派都有自己的体重子集:
# 先在分组内定义局部mass变量,再计算统计值 mass.summary <- ddply(Gangs, ~Gang_affiliation, function(group_df) { mass <- group_df$Mass_kg summarise(group_df, minimum = min(mass, na.rm = TRUE), mean = mean(mass, na.rm = TRUE), maximum = max(mass, na.rm = TRUE)) })
效果验证
运行修正后的代码,你就能得到每个帮派对应的正确体重最小值、均值和最大值啦,不会再出现所有结果一致的情况~
内容的提问来源于stack exchange,提问作者duman403
相关产品推荐
相关产品推荐

