如何在 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 中跨多个字段创建简单的交叉表的主要内容,如果未能解决你的问题,请参考以下文章

如何在 wxPython 中跨多个监视器创建框架?

如何在 Java 中跨多个不同的 SQL 数据库创建 ORM?

BigQuery SQL 中跨多个字段的拆分函数

如何在代码点火器模型中跨多个函数实现数据库锁定?

如何在 C++ 中跨多个源文件共享变量?

多个数据点的交叉表查询