计算列表

时间:2018-01-26 18:45:25

标签: r

我有以下格式的字符向量

char1 <- c(“Hello”, “was”, “this”, “is”, “that”, “Boston”, “San”, “Francisco”)
char2 <- c(“John”, “was”, “they”, “is”, “Hello”, “Boston”, “San”, “Diego”)
char3 <- c(“John”, “very”, “happens”, “is”, “Hello”, “has”, “San”, “Diego”)

list <- list(char1, char2, char3)

但是,我有大约500个,每个长度为100,000。

如何计算此列表中所有向量的成对Jaccard索引(相似性度量)并将其作为数据帧输出(NA用于比较相同的字符向量)?这样做最有效的方法是什么?

谢谢!

1 个答案:

答案 0 :(得分:3)

您可以尝试以下方法,以union

中的intersectdplyr获取所有成对距离
dist <- unlist(lapply(combn(list, 2, simplify = FALSE), function(x) {
  length(intersect(x[[1]], x[[2]]))/length(union(x[[1]], x[[2]])) }))

dist
[1] 0.4545455 0.2307692 0.4545455

要查看哪些对与哪些值相关联,您可以添加索引:

cbind(t(combn(3,2)), dist)

              dist
[1,] 1 2 0.4545455
[2,] 1 3 0.2307692
[3,] 2 3 0.4545455