Uso*_*obi 6 r levenshtein-distance
我有两个带数值的向量.如
v1 <- c(1, 3, 4, 5, 6, 7, 8)
v2 <- c(54, 23, 12, 53, 7, 8)
Run Code Online (Sandbox Code Playgroud)
我想计算插入,删除和替换的数量,我需要将一个向量转换为另一个向量,每个操作分别具有一定的成本c1 c2和c3.我知道基础包上的函数adist为字符串执行此操作,但我不知道与数字等效的函数.
我想用一个字母引用每个数字,但我有超过2000个唯一数字,所以如果有人知道如何在R中获得2000个不同的字符,这对我来说也是一个解决方案.
谢谢你的帮助.
整数向量可以看作是以UTF-32编码的单个字符串(其中一个Unicode代码点表示为单个32位整数).您可以通过将这样的矢量转换为UTF-8来获得"普通"字符串intToUtf8.
intToUtf8(c(65, 97))
## [1] "Aa"
Run Code Online (Sandbox Code Playgroud)
顺便说一句,adist不utf8ToInt(反向操作)默认情况下,在其输入反正.所以在内部,它根据整数向量计算结果.没有大的黑客.
这是解决方案.
adist(intToUtf8(c(1, 3, 4, 5, 6, 7, 8)), intToUtf8(c(54, 23, 12, 53, 7, 8)), counts=TRUE)
## [,1]
## [1,] 5
## attr(,"counts")
## , , ins
##
## [,1]
## [1,] 0
##
## , , del
##
## [,1]
## [1,] 1
##
## , , sub
##
## [,1]
## [1,] 4
##
## attr(,"trafos")
## [,1]
## [1,] "SSSSDMM"
Run Code Online (Sandbox Code Playgroud)
如果至少所有数字都严格大于0,则上述代码应该有效.R非常宽松地对待Unicode代码点(事实上,过于自由,但在这种情况下,你是胜利者),即使是最大可能的整数也被接受:
utf8ToInt(intToUtf8(c(2147483647)))
## 2147483647
Run Code Online (Sandbox Code Playgroud)
如果你有一个带负值的矢量,你可以用某种方式对其进行变换,例如x <- x-min(x)+1.
如果您需要不同的插入,移除,更换成本,请查看adist's costs参数.还有一个名为stringdist的包,其中包含许多其他字符串指标.上述方案也应该在那里工作.