在R语言中创建展示二元变量重叠计数的5维表格
生成二元变量两两重叠计数矩阵的R实现
这里给你两种简单直接的方案,都能快速得到你要的类似相关矩阵的计数表格:
方案1:矩阵乘法(高效简洁)
二元变量的特性是,两个变量同时取1的次数,等于它们向量的点积。利用这个特性,用矩阵乘法可以一步到位:
# 先模拟5个二元变量的示例数据(替换成你自己的数据即可) set.seed(123) # 固定随机种子,结果可复现 df <- data.frame( a = sample(c(0,1), 100, replace = TRUE), b = sample(c(0,1), 100, replace = TRUE), c = sample(c(0,1), 100, replace = TRUE), d = sample(c(0,1), 100, replace = TRUE), e = sample(c(0,1), 100, replace = TRUE) ) # 转成矩阵后做乘法,得到两两同时为1的计数矩阵 count_mat <- t(as.matrix(df)) %*% as.matrix(df) # 设置行列名(如果你的数据已经有列名,这步可以省略) rownames(count_mat) <- colnames(count_mat) <- c("a", "b", "c", "d", "e") count_mat
运行后你会得到一个5×5的矩阵,每个单元格count_mat[i,j]就是变量i和j同时取1的次数,对角线是每个变量自身取1的次数(如果不需要可以后续用diag(count_mat) <- NA或者手动修改)。
方案2:outer函数自定义计算(直观易懂)
如果觉得矩阵乘法有点抽象,用outer()函数遍历所有变量对,计算同时为1的次数:
# 基于上面的示例数据df count_mat2 <- outer( names(df), names(df), FUN = function(x, y) sum(df[[x]] & df[[y]]) ) # 设置行列名 rownames(count_mat2) <- colnames(count_mat2) <- c("a", "b", "c", "d", "e") count_mat2
这个方法逻辑更直白:对每一对变量x和y,统计它们同时为1的行数(也就是次数),结果和方案1完全一致。
两种方案都不需要复杂的table函数,直接针对二元变量的特性做计算,比用table再提取结果要高效得多。
内容的提问来源于stack exchange,提问作者Rose
相关产品推荐
相关产品推荐

