我正在调查问卷,分析将基于地理区域(我的数据表中的一列)。
在 R 中,我试图找到一种方法来按地理区域(KPG)汇总我的整个问卷。因此,每个地理区域都作为一行,而每个问题的可能答案(A001,A0002等)都作为一列(包括0个值)。
table(dummyframe$KPG, dummyframe$A001)
1 2 3 4 5
111 0 1 1 0 0
112 1 1 0 0 0
113 4 0 1 0 0
114 0 3 1 1 0
115 0 0 1 2 1
116 1 0 0 0 0
xtabs(~KPG+A001,dummyframe)
A001
KPG 1 2 3 4 5
111 0 1 1 0 0
112 1 1 0 0 0
113 4 0 1 0 0
114 0 3 1 1 0
115 0 0 1 2 1
116 1 0 0 0 0
两种方式都以所需的格式返回频率计数并返回问题1的表格格式
我希望能够通过添加如下内容来对问卷中的许多列执行此操作:
table(dummyframe$KPG, df$A001+A002)
但这导致针对问题1评估区域,然后针对问题1评估问题2,而我希望按区域对问题1进行评估,按区域对问题2进行评估,但是这些问题不能相互评估。
我想一步将表格函数分别应用于数据框的每一列,然后将答案绑定在一起,以便我的表格按地区列出所有答案。我尝试使用聚合
aggregate(.~KPG, dummyframe, count)
KPG A001 A002 A003 A004
1 111 2, 3 4, 5 2, 3 1, 3
2 112 1, 2 3, 5 3, 4 1, 2
3 113 1, 3 1, 2, 3, 4 1, 3, 4 1, 2, 4
4 114 2, 3, 4 1, 2, 3, 4 1, 3, 4 0, 1, 2, 4
5 115 3, 4, 5 2, 4, 5 0, 2, 3, 4 0, 3
6 116 1 1 2 1
A005
1 0, 4
2 4
3 0, 2, 3
4 1, 4
5 0, 1, 4
6 2
,这将导致在给出答案1、3和5时,每个网格单元都被c(1,3,5)值填充,并且您可以假设,这非常无用。
有循环创意吗? ??轻拍?
更新:添加了数据
structure(list(KPG = c(111L, 111L, 112L, 112L, 113L, 113L, 113L,
113L, 113L, 114L, 114L, 114L, 114L, 114L, 115L, 115L, 115L, 115L,
116L), A001 = c(2L, 3L, 1L, 2L, 1L, 1L, 3L, 1L, 1L, 2L, 2L, 4L,
2L, 3L, 3L, 4L, 5L, 4L, 1L), A002 = c(4L, 5L, 5L, 3L, 2L, 1L,
3L, 4L, 2L, 3L, 2L, 4L, 4L, 1L, 4L, 5L, 5L, 2L, 1L), A003 = c(3L,
2L, 3L, 4L, 3L, 4L, 1L, 4L, 4L, 4L, 1L, 3L, 3L, 4L, 2L, 4L, 0L,
3L, 2L), A004 = c(1L, 3L, 1L, 2L, 2L, 1L, 1L, 1L, 4L, 4L, 2L,
1L, NA, 0L, 3L, 0L, 3L, 0L, 1L), A005 = c(0L, 4L, 4L, 4L, 0L,
0L, 3L, 3L, 2L, 1L, 1L, 4L, 1L, 4L, 4L, 0L, 1L, 1L, 2L)), .Names = c("KPG",
"A001", "A002", "A003", "A004", "A005"), row.names = c(NA, 19L
), class = "data.frame")
更新:预期输出
A001 A002 A003 A004 A005
1 2 3 4 5 1 2 3 4 5 0 1 2 3 4 0 1 2 3 4 0 1 2
111 0 1 1 0 0 0 0 0 1 1 0 0 1 1 0 0 1 0 1 0 1 0 0
112 1 1 0 0 0 0 0 1 0 1 0 0 0 1 1 0 1 1 0 0 0 0 0
113 4 0 1 0 0 1 2 1 1 0 0 1 0 1 3 0 3 1 0 1 2 0 1
114 0 3 1 1 0 1 1 1 2 0 0 1 0 2 2 1 1 1 0 1 0 3 0
115 0 0 1 2 1 0 1 0 1 2 1 0 1 1 1 2 0 0 2 0 1 2 0
116 1 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1
do.call("cbind", lapply(names(dummyframe[-1]), function(x) { temp <- as.data.frame.matrix(table(dummyframe[["KPG"]], dummyframe[[x]])); setNames(temp, paste0(x, names(temp))) }))
->根据建议,可以提供预期的输出,但可以合并问题和答案编号(可以在Excel中轻松格式化)
答案 0 :(得分:1)
通过使用lapply
然后将结果cbind
一起使用,我们可以将一列的工作扩展到多列
do.call("cbind", lapply(df[-1], function(x) table(df$KPG, x)))
# 1 2 3 4 5 1 2 3 4 5 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4
#111 0 1 1 0 0 0 0 0 1 1 0 0 1 1 0 0 1 0 1 0 1 0 0 0 1
#112 1 1 0 0 0 0 0 1 0 1 0 0 0 1 1 0 1 1 0 0 0 0 0 0 2
#113 4 0 1 0 0 1 2 1 1 0 0 1 0 1 3 0 3 1 0 1 2 0 1 2 0
#114 0 3 1 1 0 1 1 1 2 0 0 1 0 2 2 1 1 1 0 1 0 3 0 0 2
#115 0 0 1 2 1 0 1 0 1 2 1 0 1 1 1 2 0 0 2 0 1 2 0 0 1
#116 1 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0