首页 > 解决方案 > 清理调查数据 - 每列中有一对相似的问题

问题描述

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

例如,一组性别数据如下所示(1 = 男性,2 = 女性)

# A tibble: 7 x 7
  Household_size    q_1   q_2   q_3   q_4   q_5   q_6 
  <int>            <int> <int> <int> <int> <int> <int>
1 3                  1     2     1     NA   NA    NA
2 2                  2     1     NA    NA   NA    NA
3 5                  1     2     1     1    2     NA
4 3                  2     2     1     NA   NA    NA
5 6                  2     1     1     1    1     1
6 5                  1     2     1     2    2     NA
7 3                  1     2     2     NA   NA    NA

元数据 说:

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

标签: rtidyrtidyverse

解决方案


base 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

推荐阅读