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

R语言统计列表多元素数值对共现次数并生成对称矩阵的方法

R语言实现列表元素数值对共现次数统计与对称矩阵生成

直接给出两种可运行的实现方案,输出结果和你提供的示例完全一致:

方法1:基础R实现(无需额外安装包)

# 输入示例数据
myList <- list(
  a = c(2,4,6),
  b = c(1,2,3,4),
  c = c(1,2,5,7),
  d = c(1,2,4,5,8)
)

# 提取所有唯一数值并排序,作为矩阵的行列索引
all_vals <- sort(unique(unlist(myList)))
val_num <- length(all_vals)

# 初始化全0对称矩阵
myMatrix <- matrix(
  data = 0,
  nrow = val_num,
  ncol = val_num,
  dimnames = list(all_vals, all_vals)
)

# 遍历列表中的每个向量统计共现
for (vec in myList) {
  # 长度小于2的向量不存在数值对,直接跳过
  if (length(vec) < 2) next
  # 生成当前向量所有不重复的两两组合
  pair_mat <- combn(vec, 2)
  # 给矩阵对应位置计数+1
  for (i in seq(ncol(pair_mat))) {
    v1 <- as.character(pair_mat[1,i])
    v2 <- as.character(pair_mat[2,i])
    myMatrix[v1, v2] <- myMatrix[v1, v2] + 1
    myMatrix[v2, v1] <- myMatrix[v2, v1] + 1
  }
}

# 查看结果
myMatrix

方法2:tidyverse风格简洁实现

library(tidyverse)

# 输入示例数据
myList <- list(
  a = c(2,4,6),
  b = c(1,2,3,4),
  c = c(1,2,5,7),
  d = c(1,2,4,5,8)
)

all_vals <- sort(unique(unlist(myList)))

myMatrix <- myList %>%
  # 为每个向量生成两两组合,合并为数据框
  map_dfr(~ as.data.frame(t(combn(.x, 2))), .id = "group") %>%
  # 统计每对数值的共现次数
  count(V1, V2) %>%
  # 补全所有可能的数值对,无共现的填充为0
  complete(V1 = all_vals, V2 = all_vals, fill = list(n = 0)) %>%
  # 转换为宽表矩阵
  pivot_wider(names_from = V2, values_from = n) %>%
  column_to_rownames("V1") %>%
  as.matrix()

# 补全矩阵下三角,保证对称
myMatrix[lower.tri(myMatrix)] <- t(myMatrix)[lower.tri(myMatrix)]

# 查看结果
myMatrix

两种方案运行后输出的矩阵完全符合你给出的示例要求,对角线默认保持为0,对应同数值的共现次数不需要统计的需求。

内容的提问来源于stack exchange,提问作者Electrino

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:36:03