如何在R中对二元变量组合生成矩阵格式的频数交叉表
用dplyr生成二元虚拟变量的交叉频数矩阵
实现步骤
首先加载所需工具包:
library(dplyr) library(tidyr)
- 生成变量组合
提取数据框的变量名,创建所有行-列变量的配对组合(包含变量自身配对):
vars <- names(df) combos <- expand.grid(row_var = vars, col_var = vars, stringsAsFactors = FALSE)
- 计算组合频数
逐行处理每个变量组合,分别计算单变量取1的频数、双变量同时取1的频数:
freq_table <- combos %>% rowwise() %>% mutate( count = ifelse(row_var == col_var, sum(df[[row_var]] == 1), sum(df[[row_var]] == 1 & df[[col_var]] == 1)) ) %>% ungroup()
- 转换为矩阵格式
将长格式的频数表转成宽格式,再转换为目标矩阵:
result_matrix <- freq_table %>% pivot_wider(names_from = col_var, values_from = count) %>% column_to_rownames("row_var") %>% as.matrix()
输出结果
运行后得到的矩阵如下:
> result_matrix dummyA dummyB dummyC dummyA 2 1 2 dummyB 1 4 2 dummyC 2 2 3
其中:
- 对角线单元格对应单个变量取1的总行数(比如
dummyA行dummyA列的2,就是dummyA=1的行数) - 非对角线单元格对应两个变量同时取1的总行数(比如
dummyA行dummyB列的1,就是dummyA=1且dummyB=1的行数)
内容的提问来源于stack exchange,提问作者HSJ
相关产品推荐
相关产品推荐

