检查一个字符串的所有字符是否存在于 r 中的另一个字符串中

check if all characters of one string exist in another string in r

我正在尝试比较 PRABHAKAR SHARMASHARMA KUMAR PRABHAKAR 等字符串。目的是检查较短字符串的所有字符是否存在于另一个字符串中。如果是这样的话,我应该得到一个 100% 的匹配,否则一个百分比代表匹配的字符的百分比。

我尝试在 RecordLinkage 包中使用 levenshteinSim,但它给出的数字对应于将一个字符串更改为另一个字符串所需的更改次数。

install.packages("RecordLinkage")
require(RecordLinkage)
levenshteinSim("PRABHAKAR SHARMA","SHARMA KUMAR PRABHAKAR")

#[1] 0.3636364

在这种情况下,我想要 100% 匹配。此外,这必须复制超过 1,000,000 条记录。

这是一种方法

s1 <- "PRABHAKAR SHARMA"
s2 <- "SHARMA KUMAR PRABHAKAR"

compare <- function(s1, s2) {
    c1 <- unique(strsplit(s1, "")[[1]])
    c2 <- unique(strsplit(s2, "")[[1]])
    length(intersect(c1,c2))/length(c1)
}

compare(s1,s2)
#1

不过可能有点慢。它也将 space 字符视为字符。使用 Vectorize 应用于列:

dat <- data.frame(small=c("a", "b"), big=c("aa", "cc"), stringsAsFactors=FALSE)
vcomp <- Vectorize(compare)
dat <- transform(dat, comp=vcomp(small, big))

如果要考虑的字符只是字母,您可以使用:

comp <- function(s1, s2){         
     in1 = letters %in% strsplit(tolower(s1), "")[[1]]
     in2 = letters %in% strsplit(tolower(s2), "")[[1]]
     sum(in1 & in2)/sum(in1)
}