You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中对二元变量组合生成矩阵格式的频数交叉表

用dplyr生成二元虚拟变量的交叉频数矩阵

实现步骤

首先加载所需工具包:

library(dplyr)
library(tidyr)
  1. 生成变量组合
    提取数据框的变量名,创建所有行-列变量的配对组合(包含变量自身配对):
vars <- names(df)
combos <- expand.grid(row_var = vars, col_var = vars, stringsAsFactors = FALSE)
  1. 计算组合频数
    逐行处理每个变量组合,分别计算单变量取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()
  1. 转换为矩阵格式
    将长格式的频数表转成宽格式,再转换为目标矩阵:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 16:42:06