You need to enable JavaScript to run this app. R语言基于dataframe构建加权邻接矩阵的高效实现方法
优惠活动
大模型
产品
解决方案
定价
更多

R语言基于dataframe构建加权邻接矩阵的高效实现方法

R语言构建加权邻接矩阵的高效实现

核心思路

无需手写嵌套循环遍历单元格,通过向量化操作构造「来源列→引用值」的配对数据,过滤无效引用后直接统计频次转换为矩阵,底层调用C实现的统计逻辑,执行效率远高于手动循环方案。

基础R实现(无外部依赖)

# 测试数据
dat <- data.frame(A=c("D", "A", "D", "B"), B=c("B", "B", "D", "R"), C=c("A", "D", "C", ""), D=c("D", "C", "A", "A"))
names_d <- colnames(dat)

# 构造来源-目标配对
pairs <- data.frame(
  source = rep(names_d, each = nrow(dat)),
  target = unlist(dat, use.names = FALSE)
)
# 过滤不属于列名的无效引用
pairs <- pairs[pairs$target %in% names_d, ]
# 统计频次生成矩阵
mat <- as.matrix(table(pairs$source, pairs$target))

超大数据量优化方案(data.table实现)

如果你的数据量达到十万行以上,用data.table的melt+聚合逻辑速度会更快:

library(data.table)
setDT(dat)
names_d <- colnames(dat)

# 宽表转长表+过滤+聚合统计
pairs <- melt(dat, measure.vars = names_d, variable.name = "source", value.name = "target")
pairs <- pairs[target %in% names_d, .N, by = .(source, target)]
# 长表转宽表生成矩阵
mat <- dcast(pairs, source ~ target, value.var = "N", fill = 0)[, -1] |> as.matrix()
rownames(mat) <- names_d

输出结果

两种方案最终得到的矩阵和预期完全一致:

A B C D
A 1 1 0 2
B 0 2 0 1
C 1 0 1 1
D 2 0 1 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 00:54:03