R语言基于词向量的数据集相似度计算与距离矩阵生成方法
实现方案
第一步:整理所有数据集到命名列表
首先将所有单词向量存入同一个命名列表,避免单独处理70+个变量,方便后续批量调用:
# 按格式将所有向量整理为命名列表,列表名对应数据集名称 word_lists <- list( df1 = c("test", "example", "random word", "another"), df2 = c("word2", "word3", "test"), df3 = c("word2", "test", "question", "stack", "overflow"), df4 = c("word2", "no", "yes", "vector") # 剩余66组数据集按相同格式补充即可 )
第二步:自定义相似度计算函数
你可以根据自身需求替换函数内部的计算逻辑,示例以两个向量的共同词汇数量作为相似度值:
calc_similarity <- function(vec1, vec2) { # 示例逻辑:返回两个向量的交集元素个数,可直接替换为你自己的相似度/距离计算规则 length(intersect(vec1, vec2)) }
第三步:批量计算两两相似度,生成桑基图所需links数据框
# 生成所有两两不重复的数据集组合 pair_combn <- combn(names(word_lists), 2, simplify = FALSE) # 遍历计算每对组合的相似度,生成长格式关联表 links <- do.call(rbind, lapply(pair_combn, function(pair) { sim_val <- calc_similarity(word_lists[[pair[1]]], word_lists[[pair[2]]]) data.frame( source = pair[1], target = pair[2], value = sim_val ) })) # 如需补充数据集自身和自身的关联记录(和你示例的links结构一致),可以补充运行以下代码 self_links <- data.frame( source = names(word_lists), target = names(word_lists), value = sapply(word_lists, function(x) calc_similarity(x, x)) # 也可以按需求设置固定值 ) links <- rbind(links, self_links)
第四步:生成对称距离矩阵
# 提取所有数据集名称 ds_names <- names(word_lists) n <- length(ds_names) # 初始化空矩阵 dist_matrix <- matrix(0, nrow = n, ncol = n, dimnames = list(ds_names, ds_names)) # 填充矩阵值 for (i in 1:nrow(links)) { dist_matrix[links$source[i], links$target[i]] <- links$value[i] dist_matrix[links$target[i], links$source[i]] <- links$value[i] }
内容的提问来源于stack exchange,提问作者ccfarre
相关产品推荐
相关产品推荐

