这段文字的意思是比较两个字符串向量,例如:
df <- data.frame(a = c("New York 001", "Orlando 002", "Boston 003", "Chicago 004", "Atlanta 005"),
b = c("NEW YORK 001", "Orlando", "Boston (003)", "Chicago 005", "005 Atlanta"))
我会尽力为您翻译。这段内容涉及编程,需要添加一列具有数字值的c列,以提供某种程度的精确度。
我的思路:
我们有这个:
> df
a b
1 New York 001 NEW YORK 001
2 Orlando 002 Orlando
3 Boston 003 Boston (003)
4 Chicago 004 Chicago 005
5 Atlanta 005 005 Atlanta
首先,去除空格,忽略大小写并同时删除所有特殊字符。
df$a <- gsub("[[:space:]]|[[:punct:]]", "", toupper(df$a))
df$b <- gsub("[[:space:]]|[[:punct:]]", "", toupper(df$b))
我们得到的是:
> df
a b
1 NEWYORK001 NEWYORK001
2 ORLANDO002 ORLANDO
3 BOSTON003 BOSTON003
4 CHICAGO004 CHICAGO005
5 ATLANTA005 005ATLANTA
所以现在我们来到了问题的核心。
第一行是100%匹配。 第二行在a列中有10个字符中的7个匹配,因此为70%。 第三行现在完全匹配。 第四行有90%的匹配。 第五行比较棘手。人类的大脑告诉我它们匹配,但是顺序有问题。但这不是计算机的工作方式。实际上,可以将它们测量为70%的匹配,因为两个字符串中有7个连续字符重复。
所以问题是:
如何进行字符串比较的定量度量?
也许有更好的方法来做到这一点,因为我从未经历过在部分匹配上比较字符串集。而且想出这种特定的可量化的度量只是我直觉上做事情的方式。如果R已经有一个库/函数以更好的方式完成所有这些工作,而我只是不知道,那我不会感到惊讶。