我从调查表中获得数据。因此数据如下所示:
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
我确实获得了频率,但是我无法获得数据帧。
答案 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)
)