我无法从字符串距离矩阵中提取最佳匹配。
我正在使用包stringdist来计算字符串距离矩阵。
例如,我使用这些代码行生成矩阵。
library(stringdist)
lookup <- c('Dog', 'Cat', 'Bear')
data <- c('Do g', 'Do gg', 'Caat')
d.matrix <- stringdistmatrix(a = lookup, b = data, useNames="strings",method="cosine")
矩阵看起来像这样
我的方法是提取余弦相似度,最低数字是最佳匹配。
例如,“Do g”将与“Dog”匹配
我想要生成的是具有consine相似度值的匹配对数据帧
data | matchwith | cosine.s
Do g Dog 0.1338746
Do gg Dog 0.1271284
Caat Cat 0.05719096
我不知道如何将数据转换为我想要的表格格式(上图)。
非常感谢任何帮助。
答案 0 :(得分:1)
which.min
功能是解决此问题的好方法
这是一个使用基数R的解决方案:
library(stringdist)
lookup <- c('Dog', 'Cat', 'Bear')
data <- c('Do g', 'Do gg', 'Caat')
d.matrix <- stringdistmatrix(a = lookup, b = data, useNames="strings",method="cosine")
#list of minimun cosine.s
cosines<-apply(d.matrix, 2, min)
#return list of the row number of the minimum value
minlist<-apply(d.matrix, 2, which.min)
#return list of matching values
matchwith<-lookup[minlist]
#final answer
answer<-data.frame(data, matchwith, cosines)
答案 1 :(得分:1)
这是一种蛮力技术,但你也可以说
n.matrix <- data.frame(data=dimnames(d.matrix)[[2]],
matchwith = dimnames(d.matrix)[[1]],
cosine.s = c(d.matrix[1,1], d.matrix[2,2], d.matrix[3,3]))
如果在实际问题中存在大量列和行,则可以构建函数来为cosine.s = c(d.matrix [i,i])创建值字符串