Как рассчитать частоту в каждом столбце - PullRequest
0 голосов
/ 24 октября 2019

Я получаю данные из анкеты. Таким образом, данные выглядят так:

ID    Q1_1  Q1_2  Q1_3  Q1_4  Q1_5  
par1    1     1     1     2     3    
par2    3     1     5     1     1    
par3    3     2     6     2     1    
par4    1     3     6     2     3    
par5    1     5     6     3     3    
par6    1     4     1     2     3    
par7    1     1     2     2     3    

, что я хочу сделать, это рассчитать частоту каждого вопроса (участники должны выбрать от «1» до «6»). Это может выглядеть как ниже. Первая строка (1-6) означает ответы участника. Q1_1, Q1_2, ... и Q1_5 - вопросы. Во втором ряду число означает частоту.

        1  2  3  4  5  6 
Q1_1    5  0  2  0  0  0
Q1_2    3  1  1  1  1  0
Q1_3    2  1  0  0  1  3
Q1_4    1  5  1  0  0  0
Q1_5    2  0  5  0  0  0

Я пытался использовать

a <- lapply(df, table)
b <- as.data.frame(a)

Ошибка в (function (..., row.names = NULL, check.rows = FALSE, check.names =ИСТИНА: аргументы подразумевают различное количество строк: 2, 5, 4, 3, 6

Я получил частоту, но не могу получить кадр данных.

1 Ответ

1 голос
/ 24 октября 2019

Использование stack()

t(table(stack(df[-1])))

      values
ind    1 2 3 4 5 6
  Q1_1 5 0 2 0 0 0
  Q1_2 3 1 1 1 1 0
  Q1_3 2 1 0 0 1 3
  Q1_4 1 5 1 0 0 0
  Q1_5 2 0 5 0 0 0

В качестве альтернативы, выбор места, где вы остановились:

do.call(rbind, lapply(df[-1], function(x) table(factor(x, levels = 1:6))))

     1 2 3 4 5 6
Q1_1 5 0 2 0 0 0
Q1_2 3 1 1 1 1 0
Q1_3 2 1 0 0 1 3
Q1_4 1 5 1 0 0 0
Q1_5 2 0 5 0 0 0

(Воспроизводимые) данные:

df <- data.frame(
  ID = c("par1", "par2", "par3", "par4", "par5", "par6", "par7"), 
  Q1_1 = c(1L, 3L, 3L, 1L, 1L, 1L, 1L), 
  Q1_2 = c(1L, 1L, 2L, 3L, 5L, 4L, 1L), 
  Q1_3 = c(1L, 5L, 6L, 6L, 6L, 1L, 2L), 
  Q1_4 = c(2L, 1L, 2L, 2L, 3L, 2L, 2L), 
  Q1_5 = c(3L, 1L, 1L, 3L, 3L, 3L, 3L)
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...