清洁调查数据 - 每列中的一对类似问题

时间:2018-05-05 19:08:46

标签: r tidyr tidyverse

我有一个凌乱的数据集(来自CATI调查)。由于受访者/合作伙伴/子文件,我在努力准备和整理它,在每一栏中处理双重(一对类似的问题)

例如,一小部分性别数据看起来像(1 =男性,2 =女性)

q_1 is  interviewee gender
q_2 is  interviewee - partner gender (if there is any)
q_3:q_6 interviewee - kid gender     (if there is any)

元数据说:

Male    15
Female  12

数据具有相同的教育,职业等格式(对受访者/伴侣/孩子的一对相同的问题)。

如何整理此数据集以便能够轻松计算统计摘要或可视化。我希望有这样的事情(调查中的男性和女性总数,不论年龄):

MIXPANEL_TOKEN

2 个答案:

答案 0 :(得分:2)

基础R中的table函数可能正是您所寻找的,它为您提供了一个多功能选项,可以计算所有级别:

table(unlist(df1[,c(2:7)]))

更改此选项可使数据框名称(df1)和列号c(2,7)符合您的需求。

这也复制了你的例子:

df1 <- data.frame("v" = LETTERS[1:7], "q1" = c(1,2,1,2,2,1,1), "q2" = c(2,1,2,2,1,2,2), "q3" = c(1,NA,1,1,1,1,2), "q4" = c(NA, NA,1,NA,1,2,NA), "q5" = c(NA, NA,2,NA,1,2,NA), "q6" = c(NA, NA,NA,NA,1,NA,NA))

> table(unlist(df1[,c(2:7)]))
 1  2 
15 12

更多例子:

df1 <- data.frame("v" = LETTERS[1:5], "q1" = c(1,2,6,1,1), "q2" = c("k","k","f","h","p"), "q3" = c(1,2,NA,1,NA))

> df1
  v q1 q2 q3
1 A  1  k  1
2 B  2  k  2
3 C  6  f NA
4 D  1  h  1
5 E  1  p NA 

table(unlist(df1[,c(2,4)]))
table(unlist(df1[,3]))

> table(unlist(df1[,c(2,4)]))
1 2 6 
5 2 1 

> table(unlist(df1[,3]))
f h k p 
1 1 2 1

答案 1 :(得分:2)

如果您将数据放入长格式,过滤掉NA,将性别纳入因子,并统计计数,这是很简单的。我正在使用fct_recode中的forcatstidyverse附带),但您也可以更改基数R中的因子级别标签。

library(tidyverse)

df %>%
    gather(key = person, value = gender, -Household_size) %>%
    filter(!is.na(gender)) %>%
    mutate(gender_fct = as.factor(gender) %>% forcats::fct_recode("Male" = "1", "Female" = "2")) %>%
    count(gender_fct)
#> # A tibble: 2 x 2
#>   gender_fct     n
#>   <fct>      <int>
#> 1 Male          15
#> 2 Female        12

reprex package(v0.2.0)创建于2018-05-05。