我一直在使用tidyr R软件包中的collect()来整理我的调查数据。
我想知道整理数据时是否存在处理多项选择题的方法?
这个问题不是关于特定错误,而是更多关于哪种策略最合适。
想象一下以下小标题:
tb1 <- tribble(~id,~x1,~x2,~x3,~y1,~y2,~z,
"Harry",1,1,NA,NA,1,"No",
"Jess",NA,1,1,1,1,"Yes",
"George",NA,NA,1,NA,1,"No")
在收集此多个问题的结果时,我(从逻辑上)得到了“哈利”,“杰西”和“乔治”的多行:
tb1 %>%
gather(X,val,x1:x3,-id,-z) %>%
filter(!is.na(val)) %>%
select(-val) %>%
gather(Y,val,y1:y2,-id,-X,-z) %>%
filter(!is.na(val)) %>%
select(-val)
# A tibble: 7 x 4
id z X Y
<chr> <chr> <chr> <chr>
1 Jess Yes x2 y1
2 Jess Yes x3 y1
3 Harry No x1 y2
4 Harry No x2 y2
5 Jess Yes x2 y2
6 Jess Yes x3 y2
7 George No x3 y2
我对多个条目感到有些担心,并且想知道是否存在一种很好的策略来处理需要收集的具有二进制列的调查的多项选择问题。
最后,我希望能够绘制并分析各种变量的值:即人们选择y2的次数。
这种长格式似乎不太实用,因为count()将适用于Harry对y2的所有重复提及。
我对此主题的疑问流如下:
答案 0 :(得分:1)
我认为最简单的方法是明确地将所有响应收集到一栏中。
library(tidyverse)
tb1 %>%
spread(key = z, value = z, sep = "_") %>%
gather(key = "Question", value = "Answer", -id, na.rm = T) %>%
select(-Answer) -> reshape_tb1
> reshape_tb1
# A tibble: 12 x 2
id Question
<chr> <chr>
1 Harry x1
2 Harry x2
3 Jess x2
4 George x3
5 Jess x3
6 Jess y1
7 George y2
8 Harry y2
9 Jess y2
10 George z_No
11 Harry z_No
12 Jess z_Yes
通过这种方式,您可以轻松地将其提供给ggplot2
ggplot(reshape_tb1) +
geom_bar(aes(x = Question))