首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >匹配相似的字符/单词

匹配相似的字符/单词
EN

Stack Overflow用户
提问于 2017-06-04 13:29:14
回答 1查看 49关注 0票数 0

我有以下包含列X和Y的数据框架,

代码语言:javascript
复制
    X                                   Y
1   SAN DIEGO                           FOND DU LAC
2   THE RIO GRANDE                      RIO GRANDE
3   RIO GRANDE                          RIO GRANDE
4   WEST TENNESSEE                      TENNESSEE
5   EP De SAN JOAQUIN                   De SAN JOAQUIN
6   SOUTHERN VIRGINIA                   VIRGINIA
7   SOUTHERN VIRGINIA                   SOUTHWESTERN VIRGINIA
8   EN COLOMBIA                         COLOMBIA
9   THE EP De NORTHERN CALIFORNIA       De NORTHERN CALIFORNIA
10  FLORIDA                             NEW JERSY

我想要得到不匹配的行,1和10。行2-9是匹配的或接近匹配的,没有问题。我期望的数据帧是

代码语言:javascript
复制
    X                                   Y
1   SAN DIEGO                           FOND DU LAC
10  FLORIDA                             NEW JERSY
EN

回答 1

Stack Overflow用户

发布于 2017-06-04 13:34:18

R中,我们将字符串按每列中的空格拆分,检查单词之间是否有intersect,找到listlengths,并将长度为0的数据集设置为子集

代码语言:javascript
复制
df1[!lengths(Map(intersect, strsplit(df1$X, "\\s+"), strsplit(df1$Y, "\\s+"))),]
#          X           Y
#1  SAN DIEGO FOND DU LAC
#10   FLORIDA   NEW JERSY

我们也可以循环遍历列,而不是按每列拆分,而是执行split

代码语言:javascript
复制
df1[!lengths(do.call(Map, c(intersect, unname(lapply(df1, strsplit, split="\\s+"))))),]
#      X           Y
#1  SAN DIEGO FOND DU LAC
#10   FLORIDA   NEW JERSY

或者另一种选择是stringdist

代码语言:javascript
复制
library(stringdist)
i1 <- with(df1, stringdist(X, Y, method = "qgram"))
df1[i1 %in% tail(sort(i1), 2),]
#          X           Y
#1  SAN DIEGO FOND DU LAC
#10   FLORIDA   NEW JERSY
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44351043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档