Я бы подошел к этому, преобразовав эти данные в длинную форму (например, 3 столбца: класс, пол, состояние и ~ 400 строк для каждой комбинации), а затем присоединился бы к отдельной таблице с заполнениями состояний (предпочтительно включающими одно и то же состояние).сокращений), а затем нормализуйте каждое число по населению штата.
Вот пример.
library(tidyverse)
df %>%
gather(state, count, AK:WY) %>% # easier to work with if we gather into long form
left_join( # left_join will pull in matching data for each row
state.x77 %>% # ...using data included in R's base datasets,
as.data.frame() %>% # updated in this case to just show state abbrev
rownames_to_column() %>% # and a population number
mutate(state = state.abb) %>%
select(state, Population)
) %>%
mutate(rate_10k = count / (Population * 10)) %>% # Find rate per 10k
filter(class == "Yes") %>% # Only include the "Yes" answers
ggplot(aes(state %>% fct_reorder(rate_10k),
rate_10k,
color = sex)) +
geom_point() +
coord_flip() +
labs(x = "Rate per 10,000 population",
y = "State")