r语言 - 比较两个字符串,不考虑组成字符串的单词的位置



我知道,如果

s1 <- "string"
s2 <- "String"

可以按如下方式进行比较:

# Case-sensitive check
s1 == s2
# Case-insensitive check
tolower(s1) == tolower(s2)
然而,我想到的是另一种比较:
s1 <- "John Smith"
s2 <- "Smith John"

如果我把前面的代码应用到这个例子中,我得到的结果是FALSE。但是这两个字符串是由相同的单词组成的,我想比较一下,在这个例子中,TRUE

我们创建一个函数,通过空格(strsplit)拆分字符串,然后unlist,sort,获得unique元素,paste它们再次在一起。

f1 <- function(x) toString(unique(sort(unlist(strsplit(tolower(x), " ")))))
f1(s1) == f1(s2)
#[1] TRUE

注:大写字母(65 ~ 90)和小写字母(97 ~ 122)的ASCII码用不同的数字表示。因此,我们需要将其设置为比较的标准用例

使用utf8ToInt:

check_string <- function(s1, s2) {
sum(utf8ToInt(tolower(s1))) == sum(utf8ToInt(tolower(s2)))
}
check_string("string", "string")
#[1] TRUE
check_string("string", "String")
#[1] TRUE
check_string("John Smith", "Smith John")
#[1] TRUE

这些字符串基本上是相互变位的。您可以通过将两个字符串存储在map中并比较两个map来检查是否存在。

dict(collection.Counter(S1)) == dict(collection.Counter(S2))

相关内容

最新更新