R:字符串中不同字符数的成对矩阵

问题描述

我有一个向量,其中包含大量长度相同的字符串。例如:

vec = c("keep","teem","meat","weep")

我想比较此向量中的所有可能的字符串对,并计算它们之间不同的字符数。使用上面的向量,“ keep”将与向量中的每个其他字符串进行比较,“ teem”将与其他字符串进行比较,依此类推。 我只想计算每个字符串中相同位置的不同字符数。因此,例如“ keep”与“ teem”将有2个差异,“ keep”与“ meat”将有3个差异,依此类推。我想将结果输出为成对矩阵,其中向量中的字符串组成行名和列名。

我从另一篇文章How can I compare two strings to find the number of characters that match in R,using substitution distance?)中学到,我可以在mapply中使用adist参数来计算两个字符串之间的差异数:

mapply(adist,string1,string2)

但是我不确定如何修改它以对向量中的每个可能的成对组合进行操作,并将结果放置在成对矩阵中。关于如何做到这一点的任何想法?谢谢!

解决方法

您是说像下面那样使用adist吗?

> `dimnames<-`(adist(vec),rep(list(vec),2))
     keep teem meat weep
keep    0    2    3    1
teem    2    0    3    2
meat    3    3    0    3
weep    1    2    3    0
,

带有stringdistmatrix

的选项
library(stringdist)
out <- as.matrix(stringdistmatrix(vec))
dimnames(out) <- list(vec,vec)