For example my table is shown as below
| Job | Gender |
|---|---|
| CEO | Male |
| Manager | Male |
| Manager | Female |
| Manager | Male |
| Supervisor | Female |
Then I would like to organize it to something like below
| Job | Male | Female |
|---|---|---|
| CEO | 1 | 0 |
| Manager | 2 | 1 |
| Supervisor | 0 | 1 |
How can I make it right?
>Solution :
You need to group_by the Job column, then count the Gender in each Job. After that, transform the dataframe into a "wide" format by expanding the count result.
library(tidyverse)
df %>%
group_by(Job) %>%
count(Gender) %>%
pivot_wider(names_from = Gender, values_from = n, values_fill = 0) %>%
ungroup()
# A tibble: 3 × 3
Job Male Female
<chr> <int> <int>
1 CEO 1 0
2 Manager 2 1
3 Supervisor 0 1
Or more simply, a single table function.
table(df$Job, df$Gender)
Female Male
CEO 0 1
Manager 1 2
Supervisor 1 0