在R中对数据框列表计算每行相邻对的余弦相似度
解决方案
1. 加载依赖包
首先需要加载lsa包,未安装则先执行安装命令:
install.packages("lsa") library(lsa)
2. 定义计算连续行余弦相似度的函数
这个函数接收单个数据框,遍历所有连续行对,计算每对的余弦相似度并返回结果向量:
calc_cosine_pairs <- function(df) { row_count <- nrow(df) # 行数不足2时返回空向量 if (row_count < 2) return(numeric(0)) cosine_values <- numeric(row_count - 1) # 遍历每一对连续行 for (i in seq_len(row_count - 1)) { # 提取行并转置为列向量矩阵(适配lsa::cosine的输入要求) vec_current <- t(as.matrix(df[i, ])) vec_next <- t(as.matrix(df[i + 1, ])) # 计算余弦相似度并转为数值 cosine_values[i] <- as.numeric(lsa::cosine(vec_current, vec_next)) } return(cosine_values) }
3. 遍历数据框列表计算结果
用lapply遍历数据框列表,应用上述函数:
# 模拟数据 df1 = data.frame(y1 = c(1,2,3,4,5), y2 = c(2,3,4,5,6), y3 = c(5,4,3,2,1)) df2 = data.frame(y1 = c(6,7,8,9,10), y2 = c(6,5,4,3,2), y3 = c(1,3,5,7,9)) dflist = list(df1, df2) # 计算所有数据框的连续行余弦相似度 cosine_results <- lapply(dflist, calc_cosine_pairs)
4. 分开保存结果
方式1:通过列表索引直接提取
cosine_results是列表,每个元素对应原数据框的计算结果:
cos_df1 <- cosine_results[[1]] # df1的余弦值 cos_df2 <- cosine_results[[2]] # df2的余弦值
方式2:命名列表后通过名称访问
给列表命名让访问更直观:
names(cosine_results) <- c("cos_df1", "cos_df2") cos_df1 <- cosine_results$cos_df1 cos_df2 <- cosine_results$cos_df2
方式3:自动生成独立变量
数据框数量较多时,用循环自动生成对应变量:
for (idx in seq_along(cosine_results)) { assign(paste0("cos_df", idx), cosine_results[[idx]]) }
执行后会生成cos_df1、cos_df2等独立变量。
示例结果
运行代码后,cos_df1的结果为:
[1] 0.9493361 0.9554417 0.9715207 0.9922779
cos_df2的结果为:
[1] 0.9728838 0.9728838 0.9728838 0.9728838
内容的提问来源于stack exchange,提问作者celialayla
相关产品推荐
相关产品推荐

