如何计算每一列的频率

时间:2019-10-24 08:39:33

标签: r

我从调查表中获得数据。因此数据如下所示:

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)
  

错误(函数(...,row.names = NULL,check.rows = FALSE,check.names = TRUE,:     参数暗示不同的行数:2、5、4、3、6

我确实获得了频率,但是我无法获得数据帧。

1 个答案:

答案 0 :(得分:1)

使用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)
)