如何根据另一个变量的平均值对变量进行排序

Posted

技术标签:

【中文标题】如何根据另一个变量的平均值对变量进行排序【英文标题】:how to order a variable depending on the mean of another variable 【发布时间】:2021-09-10 06:50:27 【问题描述】:

我有一个数据库,其中有来自 75 所学校的 30000 名学生的 30000 次观察,每所学校都由自己的代码定义,例如,您在下面看到由代码“01302P”定义的同一所学校的 5 名学生的分数”。

但是,还有许多其他学校(总共 75 所),并且对于每所学校,我们都有一个特定的代码,

然后,我们计算每所学校所有学生的平均分数,这意味着我们有一个包含每所学校 75 个平均分数的表格,这个平均分数可以让我们比较每所学校的表现。

现在我要做的是根据学校的平均分数来订购学校,我尝试了以下代码:

boxplot(moy_exam2~CODEETAB,epl_data,las=2,main="schools order",xlab = NULL,ylab = "Mean of score (moy_exam2)",col = 'red')

它生成了这个箱线图,我可以根据学生的平均分数来判断哪所学校是最好的,它的代码是“51680Y”,但我不能做更多的事情!因为剧情里满是学校,看不清楚顺序。

但我需要一种方法来根据平均分数结果对所有学校进行排序,

另外我更喜欢使用 ggplot2 库来增强代码

请提前帮助和感谢。

【问题讨论】:

【参考方案1】:

您可以根据学校的平均分数(下面使用 dplyr 完成)对学校进行排序,然后将该学校顺序指定为学校的因子水平。

library(ggplot2)
library(dplyr)

df <- data.frame(
  schools = rep(LETTERS[1:20], 20),
  scores = rnorm(400, sample(1:400))
)

means <- group_by(df, schools) %>%
  summarise(mu = mean(scores)) %>%
  arrange(mu)

df %>%
  mutate(schools = factor(schools, levels = means$schools)) %>%
  ggplot(aes(schools, scores)) +
  geom_boxplot()

由reprex package (v1.0.0) 于 2021 年 6 月 27 日创建

【讨论】:

谢谢老兄,但我得到了这个错误:平均值错误(分数):找不到对象'分数'我认为summarise函数行总结中有问题(mu = mean(scores)) 【参考方案2】:

你可以走的路线:计算学校的平均分:

library(dplyr)

data %>% 
group_by(schools) %>%
summarize(score_mean = mean(scores)) %>%
ungroup() %>%
arrange(desc(score_mean))

在此之后,您可以使用新的 DF 来创建视觉效果。也不要忘记替换变量名

【讨论】:

以上是关于如何根据另一个变量的平均值对变量进行排序的主要内容,如果未能解决你的问题,请参考以下文章

如何使用以下代码根据实例变量对对象数组进行升序排序

如何在 MySQL 中对具有不同平均值的三个变量进行分组?

R:具有分组并且依赖于另一个变量的加权平均值

R - 对连续变量标题进行分组,将分类变量因子作为行并聚合为最小值、最大值、平均值

pandas使用groupby函数基于多个分组变量(多变量分组)对dataframe数据进行分组使用mean函数计算所有分组下数据变量的聚合平均值

pandas使用groupby函数基于多个分组变量(多变量分组)对dataframe数据进行分组使用mean函数计算所有分组下数据变量的聚合平均值