对R中的一个问题的多个回答:我如何在保留其余数据的同时转换为数字和分析?



我有一个数据集,受访者可以为同一个问题选择多个答案,其中一个描述了他们的国籍。大多数人只选择了一个类别,而有些人选择了多个类别(包括我将单独报告条目的免费文本条目)。我想知道如何尊重那些选择了多个回答而不扭曲其余数据的人

实际上,我想做的就是从中获得基本的人口统计数据(n, mean, sd等),所以我可以接受样本中不同国籍群体的总数超过参与者的数量(除非有某种原因,这是一个我没有想到的坏主意,在这种情况下,请说明)。我通过as.numeric(),运行了我的专栏,它响应了一些值被强制为NAs(具有多个响应的值)-我知道如何使用例如gsub(",", "")来修复此错误,但不是以有意义的方式保留这些人的答案。我在这里看到了几个解决这个问题的方法,但我还是一个R初学者,所以我不确定最好的方法是什么。

我会对任何解决方案感兴趣,其中我可以将那些选择此问题的多个答案作为他们自己的组,以及在他们原来的类别中。例如:一张表:英语:5人,威尔士语:3人,苏格兰语:2人,北爱尔兰语:1人,英国语:4人,其他:0人;一个表,英语:3,威尔士语:1,苏格兰语:1,北爱尔兰语:1,英国语:3,其他:0,多个选择:2。

虚拟数据如下:

Nationality <- c(1, "1,2,3,5", 2, "1,2,5", 1, 1, 3, 5, 5, 4)

我稍后还重新编码数值以显示选择文本,如下所示:

df <- df %>%
mutate(Nationality = recode(Nationality, 
'1' = 'English', 
'2' = 'Welsh',
'3' = 'Scottish',
'4' = 'Northern Irish',
'5' = 'British',
'6' = 'Other'))

下面是我将运行它以获得人口统计数据的代码:

df %>%
group_by(Nationality) %>%
summarise(n = n()) %>%
mutate(Percentage = round(100*(n / sum(n)), 2))

我尝试将数据集的相关列转换为数字(包括国籍列)

df <- df %>% mutate(across(c(1, 2, 4, 5, 7, 13:57), as.numeric))

,正如预测的那样,返回"Warning: NAs引入强制"。我想过提取列并使用我链接的帖子中的解决方案,但没有任何运气。

之前没有发布过问题,所以如果我需要提供更多的信息,请让我知道。我希望我已经解释得足够好,能够给出问题的要点。

我们可以在此之前将列分隔成更长的列,或者使用str_replace修改值,然后在使用summary

进行分组之前将列分开。
library(dplyr)
library(stringr)
library(tidyr)
df %>% 
mutate(Nationality = str_replace_all(Nationality, c('1' = 'English', 
'2' = 'Welsh',
'3' = 'Scottish',
'4' = 'Northern Irish',
'5' = 'British',
'6' = 'Other'))) %>% 
separate_longer_delim(Nationality, delim = ",") %>%   
group_by(Nationality) %>%
summarise(n = n()) %>%
mutate(Percentage = round(100*(n / sum(n)), 2))

与产出

# A tibble: 5 × 3
Nationality        n Percentage
<chr>          <int>      <dbl>
1 British            4      26.7 
2 English            5      33.3 
3 Northern Irish     1       6.67
4 Scottish           2      13.3 
5 Welsh              3      20   

相关内容

  • 没有找到相关文章

最新更新