【问题标题】:similarity index in a list of character vectors字符向量列表中的相似度索引
【发布时间】:2014-04-20 21:55:17
【问题描述】:

我有一个看起来像这样的列表:

$`264`
[1] "CHAMP1" "MAP1S"  "PRRC1"  "TUT1"   "CDK12" 

$`265`
[1] "TUT1"   "PRRC1"  "CHAMP1" "MAP1S"

$`266`
[1] "REPS1"  "CHAMP1" "PRRC1"  "TUT1"   "MAP1S" 

$`267`
[1] "G3BP1"  "TUT1"   "PRRC1"  "CHAMP1" "MAP1S" 

$`268`
[1] "TUT1"   "CHAMP1" "PRRC1"  "MAP1S"  

$`269`
[1] "DDB1"   "CHAMP1" "TUT1"   "PRRC1"  "MAP1S"

有没有package或者函数来计算不同列表组件之间的相似度?

非常感谢

【问题讨论】:

  • 请更具体。您想要所有列表元素的相似性吗?还是仅在每个列表元素的各个元素之间存在相似性?抱歉,如果这听起来令人困惑。
  • 我想要列表元素之间的相似性,例如:intersect(list[[1]], list[[2]])/union(list[[1]], list[[2]],希望现在更清楚
  • 没有。不清楚。您希望从您提供的数据中看到什么结果?
  • 这应该被关闭,因为你正在寻求一个包的建议。看看 tm 包和dissimilarity 函数。

标签: r similarity


【解决方案1】:

我不知道有任何软件包,但这实现了您自己的指标(来自您的评论):

siml  <- function(x,y) {
  length(intersect(lst[[x]],lst[[y]]))/length(union(lst[[x]],lst[[y]]))
}
z      <- expand.grid(x=1:length(lst),y=1:length(lst))
result <- mapply(siml,z$x,z$y)
dim(result) <- c(length(lst),length(lst))
result
#       [,1] [,2]  [,3]  [,4] [,5]  [,6]
# [1,] 1.000  0.8 0.667 0.667  0.8 0.667
# [2,] 0.800  1.0 0.800 0.800  1.0 0.800
# [3,] 0.667  0.8 1.000 0.667  0.8 0.667
# [4,] 0.667  0.8 0.667 1.000  0.8 0.667
# [5,] 0.800  1.0 0.800 0.800  1.0 0.800
# [6,] 0.667  0.8 0.667 0.667  0.8 1.000

这是一种(稍微)更有效的方法来做同样的事情:

result <- sapply(lst,function(x) 
            sapply(lst,function(y,x)length(intersect(x,y))/length(union(x,y)),x))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2018-07-15
    • 2019-05-01
    相关资源
    最近更新 更多