如何在 R 中跨多个字段创建简单的交叉表
Posted
技术标签:
【中文标题】如何在 R 中跨多个字段创建简单的交叉表【英文标题】:How to create a simple crosstab across multiple fields in R 【发布时间】:2022-01-13 21:10:43 【问题描述】:我觉得这个问题有一个简单的答案,因为这个论坛上有很多类似的问题,但由于某种原因似乎没有一个适用。
我有调查数据以及通过 excel 上传到 R 中的分段分配。我的数据结构基本上是这样的(大约 50 个字段,包括分段分配,针对 330 名受访者中的每一位):
RespondentID | Household.Size | Children.in.household | Segment |
---|---|---|---|
1 | 3 | Yes | Segment 1 |
2 | 2 | No | Segment 3 |
3 | 1 | No | Segment 2 |
4 | 2 | No | Segment 5 |
5 | 4 | Yes | Segment 1 |
正如您在上面看到的,有些变量是数字的,有些是分类的。我想创建一个简单的交叉表,不需要统计测试,它总结了每个段的每个字段。 IE。对于每个细分市场,该细分市场的受访者中有多少百分比的家庭规模为 1、2、3 等;家里有孩子的比例等。
我已经尝试过 CrossTable 和 crosstab(我意识到后者只是前者的包装),但我什么也做不了。论坛中发布的大多数解决方案都是针对单个字段的,如果可能的话,我希望避免为 50 个字段中的每一个生成单独的表格。
如果有解决此问题的简单方法,请告诉我!
【问题讨论】:
你能描述一下这会是什么样子吗?在我看来,它们自然应该是单独的表格,但也许我还没有看到您正在考虑的格式。 @JonSpring 我猜这个请求是为了自动生成 50 个表。 根据我们从承包商那里获得的交叉表,我相信您是正确的 - 每个字段都会有一个单独的表格。但是,我不希望为 50 个字段生成单独的表 - 即。有 50 行代码,每行都会生成一个表格——如果我不需要的话(尽管如果必须的话我会接受——我也不知道如何完成)。 @IRTFM 确切地说-我希望有一个函数可以基本上说“对于每个字段,生成一个汇总表,其中行是字段值,列是段,单元格包含对应于每个字段值的每个段的百分比" 查看tbl_summary
包中的gtsummary
。
【参考方案1】:
使用最后注释中可重复显示的数据并假设我们有少量段(即 5)和大量变量,请尝试使用 table1 或 similar 包。 (如果要将数值列视为离散项,请先将所有列转换为因子。)
library(table1)
tab1 <- table1(~ . | Segment, DF[-1])
as.data.frame(tab1)
给予:
Segment 1 Segment 2 Segment 3 Segment 5 Overall
1 (N=2) (N=1) (N=1) (N=1) (N=5)
2 Household.Size
3 Mean (SD) 3.50 (0.707) 1.00 (NA) 2.00 (NA) 2.00 (NA) 2.40 (1.14)
4 Median [Min, Max] 3.50 [3.00, 4.00] 1.00 [1.00, 1.00] 2.00 [2.00, 2.00] 2.00 [2.00, 2.00] 2.00 [1.00, 4.00]
5 Children.in.household
6 Yes 2 (100%) 0 (0%) 0 (0%) 0 (0%) 2 (40.0%)
7 No 0 (0%) 1 (100%) 1 (100%) 1 (100%) 3 (60.0%)
注意
DF <-
structure(list(RespondentID = 1:5, Household.Size = c(3L, 2L,
1L, 2L, 4L), Children.in.household = c("Yes", "No", "No", "No",
"Yes"), Segment = c("Segment 1", "Segment 3", "Segment 2", "Segment 5",
"Segment 1")), class = "data.frame", row.names = c(NA, -5L))
【讨论】:
您好,非常感谢您的帮助!我无法使上述解决方案正常工作,table1() 需要太多输入,而且我一直遇到错误。但是,@George Savva 对 tbl_summary 的建议正是我需要的。我在导出输出时遇到了一点麻烦,这是一个无法强制转换为数据框的大文件,但我通过在新窗口中打开结果并将结果复制粘贴到 Excel 来管理它。谢谢!! 您应该尝试答案中链接中的所有包,而不仅仅是示例包。链接中的列表包括 table1、gtsummary 和许多其他包。以上是关于如何在 R 中跨多个字段创建简单的交叉表的主要内容,如果未能解决你的问题,请参考以下文章