如何为重叠类别创建列联表?(R语言数据框场景)
实现R语言类别重叠计数列联表
核心思路
要计算各Claim类别间的重叠计数(即两列同时为TRUE的行数),可以通过逻辑列转0-1矩阵 + 矩阵交叉乘积的方式快速实现,原理是矩阵乘法会自动统计两两列对应位置均为1的元素总和。
具体步骤与代码
加载并预处理数据
先提取目标逻辑列,简化列名方便后续表格展示:# 加载数据 df <- structure(list(`Product Name` = c("Apple", "Banana", "Cherry", "Date", "Elderberry", "Fig", "Guava", "Honeydew", "Kiwi", "Lemon"), Benefits_Claim = c(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE), Warnings_Claim = c(FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE), Instructions_Claim = c(FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE), Features_Claim = c(TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, TRUE, TRUE)), row.names = c(NA, -10L), class = c("tbl_df", "tbl", "data.frame")) # 提取4个Claim逻辑列,简化列名 claim_cols <- df[, c("Benefits_Claim", "Warnings_Claim", "Instructions_Claim", "Features_Claim")] colnames(claim_cols) <- gsub("_Claim", "", colnames(claim_cols))计算重叠计数矩阵
将逻辑列转为0-1矩阵,通过矩阵交叉乘积得到两两重叠的计数:# 转成0-1矩阵(TRUE=1,FALSE=0) claim_mat <- as.matrix(claim_cols) * 1 # 计算交叉计数:行i列j的值 = 类别i和类别j同时为TRUE的行数 cross_table <- t(claim_mat) %*% claim_mat转换为易读的表格格式
将矩阵转为数据框,若需要美观的输出可使用knitr::kable:# 转成数据框并添加行名列 cross_df <- as.data.frame(cross_table) cross_df$Category <- rownames(cross_df) cross_df <- cross_df[, c("Category", colnames(cross_table))] # 生成格式化表格(需加载knitr包) library(knitr) kable(cross_df, align = "c")
最终输出表格
运行上述代码后,会得到如下结果:
| Category | Benefits | Warnings | Instructions | Features |
|---|---|---|---|---|
| Benefits | 3 | 2 | 2 | 3 |
| Warnings | 2 | 9 | 8 | 3 |
| Instructions | 2 | 8 | 8 | 3 |
| Features | 3 | 3 | 3 | 4 |
说明
- 对角线单元格:对应类别自身为
TRUE的水果数量(比如Benefits列有3个TRUE) - 交叉单元格:对应两个类别同时为
TRUE的水果数量(比如Warnings和Benefits交叉的2,指Kiwi、Lemon同时满足两个Claim)
内容的提问来源于stack exchange,提问作者Jay Bee
相关产品推荐
相关产品推荐

