簡體   English   中英

將 function 應用於 R 中的數據幀列表

[英]Apply function to list of data frames in R

我有一個數據框列表,每個數據框都有一個帶有 3 維向量(3 列)的行。 我想計算每個數據幀中每對后續行的余弦相似度(lsa::cosine)(例如,第 1 行和第 2 行、第 2 行和第 3 行、第 3 行和第 4 行等)。 如何遍歷列表中的每個數據幀以計算后續行的余弦相似度,同時保持每個數據幀的余弦值分開?

以下是一些用於重現性目的的簡單假數據:

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)

提前致謝!

我們可能會使用lapply/sapply

library(lsa)
sapply(dflist, function(x) mapply(function(u, v)
   c(cosine(as.vector(u), as.vector(v))), 
   asplit(x[-nrow(x), ], 1), asplit(x[-1, ], 1)))
       [,1]      [,2]
1 0.9492889 0.9635201
2 0.9553946 0.9747824
3 0.9714890 0.9850197
4 0.9844672 0.9915254

如果您的t /matrices 不大,您可以轉置每一個,計算每行之間的相似性,然后將返回的矩陣的第一個非對角線子集化以僅比較后續行:

library(lsa)
lapply(dflist, \(x) {
  m <- cosine(as.matrix(t(x)))
  m[(col(m)-row(m)) == 1]
})
#[[1]]
#[1] 0.9492889 0.9553946 0.9714890 0.9844672
#
#[[2]]
#[1] 0.9635201 0.9747824 0.9850197 0.9915254

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM