我有一个包含三列的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]
之间的余弦相似度谢谢,
答案 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
文件。