Кросс-таблица / Частота / Подсчет нескольких переменных в R - PullRequest
0 голосов
/ 20 марта 2020

Я надеюсь, что объясню это легко, но моя конечная цель заключается в следующем: когда «Кандидат» говорит «Дональд Трамп», среди всех столбцов «Раса (n)» какой процент респондентов был «белым». Таким образом, в этом случае есть 5 случаев «Дональда Трампа» и 2 «Белых» наблюдения из «Race1», так что 40% из тех, кто выбрал «Дональда Трампа», были «Белыми». А затем найдите процентные итоги для всех остальных столбцов Race (n) и Gender. Абсолютно не могу понять лучший метод, использует ли он частоту, кросс-таблицы, подсчеты и т. Д. c.

Я знаю, я спрашиваю много по этой второй части, но кроме того, когда «Кандидат» - это « Дональд Трамп, какой процент респондентов женского пола «Гендер1» составляли белые женщины или черные женщины.

И в качестве большого бонуса, есть ли хороший пакет для представления результатов? Большое вам спасибо за любую помощь.

Candidate       Race1   Race2   Race3   Race4   Gender1   Gender2

Donald Trump    White                           Female
Democrat        White                                     Male        
Donald Trump            Black                   Female
Donald Trump                    Asian           Female
Democrat                        Asian                     Male
Democrat                Black                   Female
Democrat                                Latino            Male
Donald Trump                            Latino            Male
Donald Trump    White                           Female

1 Ответ

0 голосов
/ 20 марта 2020

Я использую 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 
...