R 按另一个因子重新排序因子级别

R 按另一个因子重新排序因子级别,r,ggplot2,R,Ggplot2,我正在尝试使用ggplot2创建一个条形图,其中条形图按填充因子的某一级别中的观察值比例排序。例如,假设我有如下数据: my_data <- data.frame(group = as.factor(rep(1:3, each = 5)), success = as.factor(c('yes','yes','yes','yes','no','yes','yes','no','no','no','yes','no','no','no','no'))) group success 1

我正在尝试使用ggplot2创建一个条形图,其中条形图按填充因子的某一级别中的观察值比例排序。例如,假设我有如下数据:

my_data <- data.frame(group = as.factor(rep(1:3, each = 5)), success = as.factor(c('yes','yes','yes','yes','no','yes','yes','no','no','no','yes','no','no','no','no')))

   group success
1      1     yes
2      1     yes
3      1     yes
4      1     yes
5      1      no
6      2     yes
7      2     yes
8      2      no
9      2      no
10     2      no
11     3     yes
12     3      no
13     3      no
14     3      no
15     3      no

有没有办法对我的分组重新排序,使它们按成功比例的升序或降序显示?

我们可以在按“组”分组后得到比例

library(dplyr)
library(ggplot2)
my_data %>% 
  group_by(group) %>% 
  mutate(prop = mean(success == 'yes')) %>%
  ungroup %>%
  ggplot(aes(x = reorder(group, prop), fill = success)) + 
       geom_bar(position = 'fill') +
       xlab('group')

我们可以通过“组”分组得到比例

library(dplyr)
library(ggplot2)
my_data %>% 
  group_by(group) %>% 
  mutate(prop = mean(success == 'yes')) %>%
  ungroup %>%
  ggplot(aes(x = reorder(group, prop), fill = success)) + 
       geom_bar(position = 'fill') +
       xlab('group')
从forcats包使用fct_重新排序:

它所做的是根据成功的平均值=='yes'对组进行重新排序,这给出了成功率

您可以使用.desc参数反转顺序。

使用fct\u从forcats包重新排序:

它所做的是根据成功的平均值=='yes'对组进行重新排序,这给出了成功率


您可以使用.desc参数颠倒顺序。

谢谢,这正是我想要的!谢谢,那正是我想要的!
ggplot(my_data, aes(x = forcats::fct_reorder(group,success == 'yes',mean,.desc = T), fill = success)) +
  geom_bar(position = 'fill')+
  xlab("group")