如何在R语言中实现箱线图按均值进行重排序?
问题解析与解决方案
你的示例中分组的均值顺序刚好和原分组的默认顺序一致,所以reorder后的顺序与原顺序无差异,看起来像是排序没生效,而非reorder功能失效。
验证原示例的排序逻辑
先计算各组均值:
- t1均值:
(1+2+3+4+5+6)/6 = 3.5 - t2均值:
(2+3+4+5+6+3)/6 ≈ 3.83 - t3均值:
(4+5+6+7+8+9)/6 = 6.5
原分组的默认顺序是t1 → t2 → t3,刚好和均值从小到大的顺序一致,所以reorder后分组水平并未改变。你可以通过以下代码验证:
levels(new_order1) # 输出结果为 [1] "t1" "t2" "t3",与原group的水平顺序一致
修改数据演示reorder生效效果
调整t2的数值,让其均值大于t3,就能看到排序变化:
values <- c(1,2,3,4,5,6,7,8,9,10,11,12,4,5,6,7,8,9) group <- c('t1','t1','t1','t1','t1','t1','t2','t2','t2','t2','t2','t2','t3','t3','t3','t3','t3','t3') df <- data.frame(values,group) # 查看调整后的各组均值 mean_values <- aggregate(df$values, by = list(df$group), FUN = mean) print(mean_values) # 输出: # Group.1 x # 1 t1 3.5 # 2 t2 9.5 # 3 t3 6.5 # 按均值从小到大排序 new_order1 <- with(df, reorder(group, values, mean, na.rm=T)) levels(new_order1) # 输出结果为 [1] "t1" "t3" "t2",顺序已改变 # 绘制箱线图,可见分组顺序按均值调整 boxplot(values~new_order1, data=df)
额外技巧:按均值降序排序
如果需要按均值从大到小排列,只需对values取反:
new_order_desc <- with(df, reorder(group, -values, mean, na.rm=T)) levels(new_order_desc) # 输出结果为 [1] "t2" "t3" "t1"
内容的提问来源于stack exchange,提问作者Log On
相关产品推荐
相关产品推荐

