如何按其中一行的子集平均值对数据帧进行排序?

Wil*_*unn 3 sorting r ggplot2 boxplot

我对R很新,但我取得了很好的进展.我已经能够将ggplot2弯曲到我的意愿,除了一件事:在我的箱线图中沿着x轴绘制分类标签的顺序.我认为这只是我对如何处理公式中数据帧范围的了解,但这里是假数据,作为一个名为df的数据帧:

Index    Label    Value
index1   A        1
index2   A        2
index3   A        3
index4   B        12
index5   B        11
index6   B        10
index7   C        8
index8   C        7
index9   C        9
...
index76  Z        15
index77  Z        17
index78  Z        16
Run Code Online (Sandbox Code Playgroud)

我的情节代码看起来像是qplot(df$Label, df$Value, data=df) + scale_x_discrete("Label") + opts(axis.text.x = theme_text(angle = 90, hjust = 0, size=7)) + geom_boxplot()给我我想要的东西,这是一个箱形图,显示标签A的一个盒子和胡须,一个用于B,一个用于C.但是,轴按照标签的顺序排列(盒子图1,2,3最接近原点,10,11,12位于中间,7,8,9位于图的右侧).我想要的是箱线图数据从标签平均值最高的子集开始,然后按递减顺序进行.我可以每个标签内的平均mean(df$Label[1:3])mean(df$Label[4:6])等,但我无法弄清楚如何让图形显示如下这样的标签地块不可走,他们出现的顺序factor(df$Label)(即A,B,C沿x盒子在2,18,8),但按照标签内最高的平均值到最低值(即沿着x的B,C,An,然后是11,8,2).

我想我会创建一个由每个标签内平均值组成的向量,并以某种方式将其传递给ggplot来指定轴顺序,但我无法弄清楚如何创建矢量来开始.

我需要知道的是:

从最高到最低的顺序,获得由每个标签的平均值组成的向量的最佳方法是什么?

如何将该矢量传递给ggplot它,以便它按这些值对x轴进行排序,同时仍然使用标记xfactor(df$Label)

我也对其他显示数据的方法持开放态度,但我认为我非常接近我想要的东西,并且给定标签内的值的均值和传播很重要.

Ram*_*ath 5

这是一种方法

# create a dummy data frame
set.seed(1234)
df = data.frame(
       label = rep(letters[1:3], each = 3),
       value = sample(100, 9))

# boxplot without sorting
qplot(label, value, data = df, geom = 'boxplot')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

# boxplot with label sorted by median of value
qplot(reorder(label, value, median), value, data = df, geom = 'boxplot')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述