有没有一种方法可以汇总我的问卷调查数据,以显示每个问题的每个答案的数量?

时间:2018-10-18 05:14:52

标签: r dataframe dplyr melt

我的数据看起来像这样:

Q1  Q2  Q3  Q4
S   NS  S   S
NS  .   S   PMI
S   S   TMI S
PMI S   S   NS

唯一的选项是S,TMI,PMI,NS(或缺少,这是一个。)。我希望它看起来像这样(称为PCP的DF):

    Q1  Q2  Q2  Q4
S   2   2   3   2
NS  1   1   0   1
PMI 1   0   0   1
TMI 0   0   1   0
.   0   1   0   0

我可以使用以下代码分两步进行操作:

Counts <-  melt(table(PCP$Q1)) %>%
  join(y = melt(table(PCP$Q2)),  type = "full") %>%
  join(y = melt(table(PCP$Q3)),  type = "full") %>%
  join(y = melt(table(PCP$Q4)),  type = "full")
Counts <- melt(Counts, key='Var1')

Bur有一个很好的方法可以一步完成此操作,也许使用dplyr / plyr软件包?

2 个答案:

答案 0 :(得分:0)

如何?

library(tidyverse)

PCP %>% 
  gather(question, answer) %>%
  mutate(answer = replace(answer, answer==".", "Missing")) %>% 
  count(question, answer) %>%
  spread(question, n, fill=0)
  answer     Q1    Q2    Q3    Q4
1 Missing     0     1     0     0
2 NS          1     1     0     1
3 PMI         1     0     0     1
4 S           2     2     3     2
5 TMI         0     0     1     0

答案 1 :(得分:0)

使用tidyversereshape2

df %>%
  gather(var, val) %>%
  group_by(var) %>%
  add_count(val) %>%
  dcast(val ~ var, value.var = "n")

  val Q1 Q2 Q3 Q4
1   .  0  1  0  0
2  NS  1  1  0  1
3 PMI  1  0  0  1
4   S  2  2  3  2
5 TMI  0  0  1  0