【发布时间】:2021-11-17 07:11:42
【问题描述】:
我正在努力解决一个在 excel 中需要一秒钟才能解决的超级简单问题,但我在 R 中找不到解决方案。我查看了许多其他帖子并尝试了不同的代码,但它仍然没有不行。
这是一个示例,说明我的数据在假设我们正在处理汽车时的样子。我有两个因素:“品牌”和“型号”(嵌套在“品牌”中);和一个“变量”。
brand = c("Mercedes","Mercedes","Mercedes","Mercedes","Mercedes",
"Mercedes","Mercedes","Mercedes","Mercedes","BMW",
"BMW","BMW","BMW","BMW","BMW","BMW","BMW","BMW")
model = c("SL_class", "SL_class", "SL_class", "A_class",
"A_class", "A_class", "E_class", "E_class",
"E_class", "4 Series", "4 Series", "4 Series",
"X1", "X1", "X1", "Z4", "Z4", "Z4")
variable = c(5,6,7,12,13,14,1,2,3,7,8,9,22,24,25,11,12,14)
data = data.frame(brand, model, variable)
data
data$brand <- factor(data$brand)
data$model <- factor(data$model)
我想以 x = 变量和 y = 模型的方式绘制这些数据:
library(tidyverse)
ggplot(data, aes(x = variable, y = model, color = brand)) +
geom_boxplot()
但我也希望“型号”按“品牌”排序,然后按“型号”按字母顺序排序。像这样,但不必手动指定我的因子的所有级别。我的原始数据集很大,我想找到一种自动的方法:
data$model <- factor(data$model,
levels = c("4 Series", "X1", "Z4",
"A_class", "E_class", "SL_class"))
data$model = fct_rev(data$model)
ggplot(data, aes(x = variable, y = model, color = brand)) +
geom_boxplot()
在 excel 中,我只需对数据进行自定义排序,将“品牌”指定为第一级排序(从 A 到 Z),将“模型”指定为第二级排序(从 A 到 Z)
除了这种排序,我还可以对“模型”的级别进行排序,首先按“品牌”(如前),然后按“变量”的中间值(从大到小)。
我可以设法按“变量”的中值(见下文)对它们进行排序,但我找不到之前按“品牌”排序的方法。
data %>%
mutate(model = fct_reorder(model, variable, .fun='median')) %>%
ggplot(., aes(x = variable, y = model, color = brand)) +
geom_boxplot()
有人可以帮我吗? 谢谢
【问题讨论】:
标签: r sorting ggplot2 tidyverse