我有一个凌乱的数据集(来自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
答案 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
中的forcats
(tidyverse
附带),但您也可以更改基数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。