获取按另一列分组的多列的频率计数

格迈克尔

我正在调查问卷,分析将基于地理区域(我的数据表中的一列)。

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中轻松格式化)

罗纳克·沙

通过使用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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

熊猫:按日期将一列分组,并在另一列中计算特定值的累计数量

按另一列分组时获取一列的不同元素的数量

sed或awk:按2列分组,并获取另一列的最后一个值

基于具有数据表的其他两个列的一列的频率计数

使用r跨多列进行频率计数

按另一列值分组并计数

熊猫:按多列分组,将一列串联,同时添加另一列

如何选择仅按一列分组的多列

R按日期分组以获取频率并使用另一列进行过滤

熊猫-按一列分组,按另一列排序,从第三列获取价值

熊猫按多列分组到一列

如何获取熊猫中的列的频率计数?

按多列排序,按另一列分组

Python:按一列分组,从另一列获取计数

在Pandas Dataframe中显示多列,但仅按一列进行分组和计数

oracle sql,id,按一列分组,多列在另一列中不同

如何选择按一列分组的多列

如何获取熊猫中每对唯一的一对列的列值的频率计数?

按多列分组并从R中的另一列分配值

按一列分组并有条件地计数另一列-MySQL

按多列分组并计数

MySQL按列分组,然后按另一列计数

R语言-按一列分组的多列计数

将熊猫数据框列中的单词按另一列分组以获得频率/计数

pandas 数据框按列分组,并根据计数分别更新另一列的行

MySQL查询以生成多列的频率计数

GroupBy Dataframe 按一列并根据另一列获取计数

计算按另一列分组的多对列之间的变化百分比

使用 Grouper 按日期时间频率对行进行分组,并绘制另一列的计数(带有复制代码)