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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 00:36:29