读取R中DataFrame中的数组并计算余弦距离

时间:2016-05-17 18:14:37

标签: r dataframe

我有一个包含三列的csv文件

sigID , author,lowered,array 
1, Lukic M,lukicm,"[ 0.05192188 -0.02984986 -0.01315994 -0.05446223  0.01090824 -0.0310401 -0.00134283 -0.0536921  -0.02986531 -0.01161558]"        
2, Houssin C,houssinc,"[ 0.05371874 -0.07439778  0.3917329  -0.15246899  0.35638699  0.14586256 0.12886068 -0.10721818 -0.14641574  0.08469024]"
....

如何在R?中读取此csv文件。 (我正在解析数组列的问题)

我怎样才能计算数组[1],数组[2]

之间的余弦相似度

谢谢,

1 个答案:

答案 0 :(得分:3)

这是一种将数组解析为vector的方法:

myList <- strsplit(gsub("\\[\\s*|\\s*\\]", "", df$array), "\\s+")

myList
[[1]]
 [1] "0.05192188"  "-0.02984986" "-0.01315994" "-0.05446223" "0.01090824"  "-0.0310401"  "-0.00134283" "-0.0536921" 
 [9] "-0.02986531" "-0.01161558"

[[2]]
 [1] "0.05371874"  "-0.07439778" "0.3917329"   "-0.15246899" "0.35638699"  "0.14586256"  "0.12886068"  "-0.10721818"
 [9] "-0.14641574" "0.08469024" 

在计算余弦距离之前将它们转换为数字:

mat <- do.call(cbind, lapply(myList, as.numeric))
mat
             [,1]        [,2]
 [1,]  0.05192188  0.05371874
 [2,] -0.02984986 -0.07439778
 [3,] -0.01315994  0.39173290
 [4,] -0.05446223 -0.15246899
 [5,]  0.01090824  0.35638699
 [6,] -0.03104010  0.14586256
 [7,] -0.00134283  0.12886068
 [8,] -0.05369210 -0.10721818
 [9,] -0.02986531 -0.14641574
[10,] -0.01161558  0.08469024

您可以使用cosine包中的lsa函数计算余弦相似度:

library(lsa)
cosine(mat)
          [,1]      [,2]
[1,] 1.0000000 0.2438864
[2,] 0.2438864 1.0000000

因此,向量1和向量2之间的余弦相似性度量为0.244。

注意:至于为什么你无法读取文件,我猜你在第一个数组的末尾有一个引号丢失。否则,想不出任何你无法阅读的理由。这是一个普通的.csv文件。