简体   繁体   中英

How to specify which value of a variable to use when using fct_reorder after grouping by two variables in R

I want to plot the number of people responding to a survey by their reported title and gender, and I want to order the bars according the number of people who listed that title. The problem is that the plot seems to be ordering it by the values reported by "Other" when I would prefer it sort them according to the values reported for "Male" (simply because more males responded and it makes the visualization better). Here is my data:

structure(list(title = c("Penetration Tester", "Penetration Tester", 
"Application Security", "Infrastructure Security", "Penetration Tester", 
"Penetration Tester", "Penetration Tester", "Penetration Tester", 
"Penetration Tester", "Security Engineer", "Security Engineer", 
"Penetration Tester", "Penetration Tester", "Penetration Tester", 
"Penetration Tester", "Penetration Tester", "Penetration Tester", 
"Penetration Tester", "Penetration Tester", "Audit", "Penetration Tester", 
"Research", "Penetration Tester", "Penetration Tester", "Security Consultant", 
"Sr. Security Consultant", "Security Engineer", "Compliance", 
"Penetration Tester", "Penetration Tester", "Red Team", "Penetration Tester", 
"Cloud Security", "Incident Response", "Penetration Tester", 
"Penetration Tester", "Incident Response", "Director", "Support", 
"Penetration Tester", "Penetration Tester", "Penetration Tester", 
"Penetration Tester", "Penetration Tester", "Penetration Tester", 
"Penetration Tester", "Red Team", "Audit", "Security Consultant", 
"Incident Response", "Infrastructure Security", "Red Team", "Red Team", 
"Penetration Tester", "Senior Security Architect", "Penetration Tester", 
"Red Team", "Penetration Tester", "Penetration Tester", "Penetration Tester", 
"Penetration Tester", "Penetration Tester", "Penetration Tester", 
"Managing Consultant", "Incident Response", "Security Analyst", 
"Penetration Tester", "Penetration Tester", "Compliance", "Red Team", 
"Incident Response", "Penetration Tester", "Penetration Tester", 
"Infrastructure Security", "Penetration Tester", "Penetration Tester", 
"Penetration Tester", "Research", "Application Security", "Penetration Tester", 
"Penetration Tester", "Application Security", "Penetration Tester", 
"Penetration Tester", "Security Engineer", "Red Team", "Penetration Tester", 
"Penetration Tester", "Red Team", "Security Engineer", "Incident Response", 
"Infrastructure Security", "Red Team", "Penetration Tester", 
"Research", "InfoSec Intern", "Incident Response", "Incident Response", 
"Research", "Penetration Tester", "Red Team", "Security Engineer", 
"Penetration Tester", "Incident Response", "Penetration Tester", 
"Penetration Tester", "Red Team", "Incident Response", "Penetration Tester", 
"Penetration Tester", "Infrastructure Security", "Red Team", 
"Penetration Tester", "Penetration Tester", "Threat Intel/Analyst", 
"Penetration Tester", "SOC Analyst", "Penetration Tester", "Penetration Tester", 
"Penetration Tester", "Infrastructure Security", "Security Consultant", 
"Penetration Tester", "Penetration Tester", "Red Team", "Penetration Tester", 
"Penetration Tester", "Penetration Tester", "Penetration Tester", 
"Threat Intel/Analyst", "Application Security", "Penetration Tester", 
"Compliance", "Security Architect", "Penetration Tester", "Penetration Tester", 
"Penetration Tester", "Security Architect", "Penetration Tester", 
"Penetration Tester", "Red Team", "Red Team", "Security Engineer", 
"Research", "Security Engineer", "Incident Response", "Penetration Tester", 
"Penetration Tester", "Penetration Tester", "Penetration Tester", 
"Penetration Tester", "Penetration Tester", "Red Team", "Security Engineer", 
"Incident Response", "Penetration Tester", "Penetration Tester", 
"Security Engineer", "Penetration Tester", "Security Engineer", 
"Penetration Tester", "Penetration Tester", "Security Engineer", 
"Penetration Tester", "Threat Hunter", "Penetration Tester", 
"Penetration Tester", "Red Team", "Penetration Tester", "Incident Response", 
"Penetration Tester", "Red Team", "Penetration Tester", "Infrastructure Security", 
"Compliance", "Info Security Manager & Data Protection Officer", 
"Penetration Tester", "Penetration Tester", "Penetration Tester", 
"Penetration Tester", "Infrastructure Security", "Penetration Tester", 
"Security Engineer", "Security Engineer", "Penetration Tester", 
"Incident Response", "Penetration Tester", "Penetration Tester", 
"Penetration Tester", "Penetration Tester", "Penetration Tester", 
"Penetration Tester", "Red Team", "Penetration Tester", "Penetration Tester", 
"Penetration Tester", "Penetration Tester", "Penetration Tester", 
"Penetration Tester", "Penetration Tester", "Penetration Tester", 
"Defensive Efficacy Testing", "Incident Response", "Information Security Analyst", 
"Penetration Tester", "Penetration Tester", "Threat Hunter", 
"Penetration Tester", "Penetration Tester", "Penetration Tester", 
"Security Engineer", "Cyber Consultant", "Security Engineer", 
"Application Security", "Research", "Research", "Research", "Red Team", 
"Application Security", "Penetration Tester", "Security Engineer", 
"Red Team", "Information Security Analyst", "Sales Engineer", 
"Penetration Tester", "Red Team", "Infrastructure Security", 
"Penetration Tester", "Security Engineer", "Incident Response", 
"Incident Response", "Penetration Tester", "Incident Response", 
"Penetration Tester", "Incident Response", "Application Security", 
"Incident Response", "Incident Response", "Security Engineer", 
"Penetration Tester", "Incident Response", "Infrastructure Security", 
"SOC Analyst", "Penetration Tester", "Penetration Tester", "Senior Software Engineer ", 
"Red Team", "Audit", "Incident Response", "Senior Security Engineer", 
"Application Security", "Research", "Penetration Tester", "Governance", 
"Penetration Tester", "Penetration Tester", "Threat Intel/Analyst", 
"Threat Intel/Analyst", "SOC Analyst", "Application Security", 
"Application Security", "Security Engineer", "Penetration Tester", 
"Incident Response", "Incident Response", "Security Architect", 
"Incident Response", "Security Engineer", "Research", "Red Team", 
"Penetration Tester", "Application Security", "Penetration Tester", 
"Research", "Application Security", "Penetration Tester", "Threat Intel/Analyst", 
"Infrastructure Security", "SOC Analyst", "CISO", "Incident Response", 
"Red Team", "Infrastructure Security", "Compliance", "Security Engineer", 
"Penetration Tester", "Incident Response", "Penetration Tester", 
"Incident Response", "SOC Analyst", "Penetration Tester", "Research", 
"Incident Response", "Application Security", "Threat Intel/Analyst", 
"SOC Analyst", "Application Security", "Penetration Tester", 
"Penetration Tester", "Security Engineer", "Security Architect", 
"Penetration Tester", "Incident Response", "Incident Response", 
"Penetration Tester", "Application Security", "Penetration Tester", 
"Security Engineer", "Incident Response", "Penetration Tester", 
"Incident Response", "Penetration Tester", "Penetration Tester", 
"Security Engineer", "Penetration Tester", "Incident Response", 
"SOC Analyst", "Penetration Tester", "Penetration Tester", "Red Team", 
"Red Team", "Red Team", "Cloud Security", "Penetration Tester", 
"Security Engineer", "Incident Response", "CISO", ".", "Penetration Tester", 
"Incident Response", "Penetration Tester", "Penetration Tester", 
"Penetration Tester", "Penetration Tester", "Compliance", "Security Architect", 
"SOC Analyst", "Application Security", "Incident Response", "SOC Analyst", 
"Security Operations", "Incident Response", "Security Engineer", 
"Penetration Tester", "Security Architect", "Application Security", 
"Security Specialist", "Security Architect", "Compliance", "Incident Response", 
"Penetration Tester", "IT Security Administrator", "Penetration Tester", 
"Application Security", "Red Team", "Penetration Tester", "Penetration Tester", 
"Penetration Tester", "Security Consultant", "Incident Response", 
"Red Team", "Penetration Tester", "Penetration Tester", "CISO", 
"Penetration Tester", "Security Engineer", "Security Engineer", 
"Penetration Tester", "Security Engineer", "Application Security", 
"Penetration Tester", "Senior It Manager", "Penetration Tester", 
"Research", "Infrastructure Security", "Penetration Tester", 
"Incident Response", "Product Manager", "Penetration Tester", 
"Incident Response", "Incident Response", "Penetration Tester", 
"Application Security", "Penetration Tester", "Penetration Tester", 
"Incident Response", "Product Manager", "Red Team", "Threat Intel/Analyst", 
"Penetration Tester", "SOC Analyst", "Penetration Tester", "Penetration Tester", 
"Incident Response", "Penetration Tester", "Infrastructure Security", 
"Threat Intel/Analyst", "Penetration Tester", "Incident Response", 
"Penetration Tester", "Security Engineer", "Penetration Tester", 
"Penetration Tester", "Incident Response", "Penetration Tester", 
"Security Architect", "Penetration Tester", "Application Security", 
"Security Engineer", "Security Architect", "Infrastructure Security", 
"Incident Response", "Threat Intel/Analyst", "Application Security", 
"Incident Response", "Security Engineer", "Incident Response", 
"Incident Response", "Penetration Tester", "Security Engineer", 
"Security Engineer", "Infrastructure Security", "Incident Response", 
"Security Engineer", "Application Security", "Incident Response", 
"Penetration Tester", "Penetration Tester", "Incident Response", 
"Security Engineer", "Penetration Tester", "Red Team", "Application Security", 
"Incident Response", "Penetration Tester", "Security Engineer", 
"Incident Response", "Penetration Tester", "Audit", "Infrastructure Security", 
"Penetration Tester", "Threat Intel/Analyst", "Audit", "Security Architect", 
"Threat Hunter", "Application Security", "SOC Analyst", "Penetration Tester", 
"Incident Response", "Security Engineer", "Penetration Tester", 
"Penetration Tester", "Information security officer", "Incident Response", 
"Incident Response", "Incident Response", "Compliance", "Penetration Tester", 
"Security Engineer", "Incident Response", "Threat Hunter", "Penetration Tester", 
"Incident Response", "Penetration Tester", "Incident Response", 
"Penetration Tester", "Security Engineer", "Governance", "Security Engineer"
), sex = structure(c(2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 3L, 1L, 1L, 2L, 3L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 3L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 
1L, 1L, 1L, 3L, 1L, 1L, 1L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 3L, 1L, 1L, 3L, 1L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 
1L, 1L, 2L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 3L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 2L, 1L, 2L, 1L, 1L, 2L, 2L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 3L, 2L, 
2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 3L, 2L, 1L, 
1L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 3L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 
1L, 1L, 2L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 3L, 2L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 3L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 3L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 3L, 1L, 1L, 1L, 
1L, 2L, 1L, 2L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 3L, 3L, 1L, 2L, 1L, 1L, 1L, 
1L, 1L, 1L, 2L, 1L, 3L, 2L, 1L, 2L, 2L, 1L), .Label = c("Male", 
"Female", "Other"), class = c("ordered", "factor"))), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -469L))

This is the code I'm using to try to generate the plot:

library(ggplot2)
library(dplyr)
library(forcats)

df %>%
    count(title, sex) %>%
    filter(!is.na(sex) & nchar(title) > 1) %>%
    ggplot() +
    geom_bar(aes(x=fct_reorder(title, n), y=n), stat="identity") +
    facet_wrap(~ sex, nrow=1, scales="fixed") +
    scale_y_continuous(expand=c(0, 0)) +
    labs(x="", y="No. People Reporting", 
         title="Significantly more men than women reported their salaries",
         subtitle="Red teamers appear to be much more likely to report their salaries") +
    coord_flip() +
    theme(panel.background=element_blank(),
          axis.line=element_line(color="black"))

My expected output would have the facets listed from left to right as "Male", "Female", and "Other", and with the top three titles being "Penetration Tester", "Incident Response", and "Security Engineer".

How can I tell R to reorder title according the values in the "Male" subset?

I'd sort the rows by sex (so that sex = "Male" rows are sorted first) / count & use fct_inorder , instead of fct_reorder in this case:

df %>%
  count(title, sex) %>%
  filter(!is.na(sex) & nchar(title) > 1) %>%

  tidyr::complete(sex, title, fill = list(n = 0)) %>% # add missing combinations so that
                                                      # every title appears for every gender
  arrange(sex, n) %>% 
  mutate(title = fct_inorder(title)) %>%

  ggplot() +
  geom_bar(aes(x=title, y=n), stat="identity") +
  facet_wrap(~ sex, nrow=1, scales="fixed") +
  scale_y_continuous(expand=c(0, 0)) +
  labs(x="", y="No. People Reporting", 
       title="Significantly more men than women reported their salaries",
       subtitle="Red teamers appear to be much more likely to report their salaries") +
  coord_flip() +
  theme(panel.background=element_blank(),
        axis.line=element_line(color="black"))

阴谋

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM