Я использую library(dplyr)
, но вот что я думаю:
data_f <- data %>%
cbind(Race = coalesce(!!!select(data, starts_with("Race"))),
Gender = coalesce(!!!select(data,starts_with("Gender"))))
coalesce
объединяет ваши столбцы, которые начинаются с Race
, а затем с Gender
, в один столбец как предоставленные вами столбцы являются взаимоисключающими.
data_r <- data_f %>%
group_by(Candidate, Race) %>%
summarise(Race_count = n()) %>%
ungroup() %>%
left_join(data_f %>%
group_by(Candidate) %>%
summarise(Total_Race_Ct = n()), by = "Candidate") %>%
mutate(Per_Race = Race_count/Total_Race_Ct)
Это дает следующий процент в процентах от общего количества кандидатов c голосов за анализ расы:
# A tibble: 8 x 5
Candidate Race Race_count Total_Race_Ct Per_Race
<chr> <fct> <int> <int> <dbl>
1 Democrat Asian 1 4 0.25
2 Democrat Black 1 4 0.25
3 Democrat Latino 1 4 0.25
4 Democrat White 1 4 0.25
5 Donald Trump Asian 1 5 0.2
6 Donald Trump Black 1 5 0.2
7 Donald Trump Latino 1 5 0.2
8 Donald Trump White 2 5 0.4
Для гендерного анализа:
data_g <- data_f %>%
group_by(Candidate, Gender) %>%
summarise(Gender_count = n()) %>%
ungroup() %>%
left_join(data_f %>%
group_by(Candidate) %>%
summarise(Total_Gender_Ct = n()), by = "Candidate") %>%
mutate(Per_Gender = Gender_count/Total_Gender_Ct)
Это дает следующий процент в процентах от общего числа кандидатов-кандидатов c голосов за гендерный анализ:
# A tibble: 4 x 5
Candidate Gender Gender_count Total_Gender_Ct Per_Gender
<chr> <fct> <int> <int> <dbl>
1 Democrat Female 1 4 0.25
2 Democrat Male 3 4 0.75
3 Donald Trump Female 4 5 0.8
4 Donald Trump Male 1 5 0.2