首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中多个变量的交叉表/频率/计数

R中多个变量的交叉表/频率/计数
EN

Stack Overflow用户
提问于 2020-03-20 22:48:24
回答 1查看 88关注 0票数 0

我希望我能很容易地解释这一点,但我的最终目标是:当“候选人”是“唐纳德·特朗普”时,在所有种族(N)列中,受访者中“白人”的比例是多少。因此,在这个例子中,有5个“唐纳德·特朗普”和2个“白人”来自“Race1”,所以选择“唐纳德·特朗普”的人中有40%是“白人”。然后查找所有其他种族(N)列和性别列的百分比总计。无论是使用频率、交叉表、计数等,都无法找出最好的方法。

我知道我在第二部分提出了很高的要求,但另外,当“候选人”是“唐纳德·特朗普”时,女性受访者“Gender1”中白人女性和黑人女性的比例是多少?

作为一个很大的奖励,有没有一个很好的包来展示结果?非常感谢你的帮助。

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2020-03-21 01:17:52

我使用的是library(dplyr),但我是这么想的:

代码语言:javascript
复制
data_f  <-  data %>% 
            cbind(Race = coalesce(!!!select(data, starts_with("Race"))), 
                  Gender = coalesce(!!!select(data,starts_with("Gender"))))

coalesce将以Race开头然后以Gender开头的列合并为一列,因为您提供的列是互斥的。

代码语言:javascript
复制
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)

这将为种族分析产生以下特定于候选人的总选票的百分比:

代码语言:javascript
复制
# 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 

对于性别分析:

代码语言:javascript
复制
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)

这将为性别分析产生以下特定于候选人的总票数的百分比:

代码语言:javascript
复制
# 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 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60776438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档