Есть ли способ суммировать данные моей анкеты, чтобы показать количество каждого ответа на каждый вопрос? - PullRequest
0 голосов
/ 18 октября 2018

Мои данные выглядят примерно так:

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

Единственными параметрами являются S, TMI, PMI, NS (или отсутствует, что является.).Я хотел бы, чтобы это выглядело так (df называется PCP):

    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

Я могу сделать это в 2 шага с помощью этого кода:

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')

Бур есть хороший способсделать это за один шаг, может быть, используя пакеты dplyr / plyr?

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Использование tidyverse и reshape2:

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
0 голосов
/ 18 октября 2018

Как насчет этого:

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
...