R 对分组变量中的因子重新排序,以便可以使用ggplot2按顺序绘制

R 对分组变量中的因子重新排序,以便可以使用ggplot2按顺序绘制,r,ggplot2,dplyr,R,Ggplot2,Dplyr,我正试图制作一张图表,显示不同性别、种族群体的平均年龄。图表本身应按最低平均年龄到最高平均年龄的顺序显示这些信息,并按总体性别分组 我使用的数据集是按工人阶级、性别/种族、性别和平均年龄分组的。我已通过以下代码成功按性别订购: rsltProf = rslt %>% filter(group == "Professionals" & avg > 0) %>% group_by(gender) %>% arrange(avg,

我正试图制作一张图表,显示不同性别、种族群体的平均年龄。图表本身应按最低平均年龄到最高平均年龄的顺序显示这些信息,并按总体性别分组

我使用的数据集是按工人阶级、性别/种族、性别和平均年龄分组的。我已通过以下代码成功按性别订购:

rsltProf = rslt %>% 
      filter(group == "Professionals" & avg > 0) %>%
      group_by(gender) %>%
      arrange(avg, .by_group = TRUE)
str(rsltProf$genXrce)
我得到以下输出:

    group          genXrce   gender      avg
1 Professionals Female-Asian Female 33.25397
2 Professionals Female-Other Female 37.55000
3 Professionals Female-White Female 39.89632
4 Professionals Female-Black Female 39.94118
5 Professionals   Male-Other   Male 32.80000
6 Professionals   Male-Asian   Male 37.86667
7 Professionals   Male-Black   Male 38.69767
8 Professionals   Male-White   Male 38.85294
Factor w/ 9 levels "Female-Asian",..: 4 2 3 1 9 7 8 6
太好了,这正是我想要的。但是,当我使用ggplot绘制它时,它会产生以下结果:

显然,这是因为ggplot2是按因子的顺序而不是按排列的数据帧的顺序绘制的。我尝试了多种方法来根据上面代码中的排列方式重新升级genXrce,但都没有成功,包括重新升级、变异和重新排序

我的问题是:如何对数据进行重新排序/安排,使ggplot2生成一个按性别分组的递增平均值的图形,与我生成的表的方式相同?非常感谢您的建议

编辑1: 在下面的评论中,建议使用forcats或类似函数通过ggplot排列图形。例如:

ggplot(data = rsltProf, mapping = aes(x =fct_reorder(!!as.name(genXrce), avg), y =  avg, fill = genXrce))
然而,这将按平均数排列所有的性别因素,不再按性别分开。为了清楚起见,条形图顺序应与表格-->女性白人、女性黑人、女性其他、女性亚洲人、男性白人、男性黑人…相同

上面的ggplot生成了下面的图表,它混淆了性别:

给定数据帧
rsltProf
的行顺序,将
genXrce
转换为该列的行顺序指定的系数:

library(dplyr)
library(ggplot2)

rsltProf %>% 
  mutate(genXrce = factor(genXrce, levels = unique(.$genXrce))) %>% 
  ggplot(aes(genXrce, avg)) + geom_col()

像这样的事?对不起,我应该说得更具体些。这是行不通的,因为它会根据平均年龄来安排所有因素——它不会将这些因素分为女性和男性@董先生,看看上面的编辑,看看在这种情况下会发生什么。你是一位绅士和学者。当使用mutate时,我不知道我必须在genXrace之前放置“$”。当我以前尝试此方法时,我没有包括.$,它将不起作用,但包括它解决了问题。如果您有时间,可以解释一下为什么需要。$吗?这是我们在使用pipes
%%>%%
时如何引用该专栏的。正如您可以键入
rsltProf$genXrce
-当我们通过管道传递数据帧时,数据帧使用
引用,因此该列变为
$genXrce
@neilfws感谢您的解释。这就是有经验有学问的人的样子。干杯