首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >stringdist_semi_join只显示来自dataframe1的列

stringdist_semi_join只显示来自dataframe1的列
EN

Stack Overflow用户
提问于 2020-04-10 17:48:47
回答 1查看 184关注 0票数 0

我有两个数据:

代码语言:javascript
复制
df1 <- data.frame(City=c("Munchen_Paris","Munchen_Paris","Barcelona_Milan", "Londen_Dublin","Madrid_Malaga"), 
                  value1=c(11,21,33,2,53))

df2 <- data.frame(City=c("Munnich_Parijs","Barcelona_Munster","Barcelona_Milan","London_Dub","London_Oxford","Pisa_Luik"), 
                  value2=c(22,2,44,54,29,65))

我试着把这些数据和模糊连接合并起来。

我正在寻找的结果是:

代码语言:javascript
复制
           City.x  value1   City.y             value2  string_distance
1   Munchen_Paris      11   Munnich_Parijs     22      5
2   Munchen_Paris      21   Munnich_Parijs     22      5
3 Barcelona_Milan      33   Barcelona_Milan    44      0
4   Londen_Dublin       2   London_Dub         54      4

(对于df1中每一行与df2 for City中的string_distance < 9匹配的行,我希望在新表中有一行包含来自df1和df2的所有列(string_distance值最低)):

代码语言:javascript
复制
df3 <- stringdist_semi_join(df1, df2, by = "City", max_dist = 9, distance_col = "string_distance")

我只收到这些栏:

代码语言:javascript
复制
> df3
             City value1
1   Munchen_Paris     11
2   Munchen_Paris     21
3 Barcelona_Milan     33
4   Londen_Dublin      2

如果我做了一个完整的加入,我会收到以下消息:

代码语言:javascript
复制
> df3 <- stringdist_full_join(df1, df2, by = "City", max_dist = 9, distance_col = "string_distance")

> df3
           City.x value1            City.y value2 string_distance
1   Munchen_Paris     11    Munnich_Parijs     22               5
2   Munchen_Paris     21    Munnich_Parijs     22               5
3 Barcelona_Milan     33 Barcelona_Munster      2               6
4 Barcelona_Milan     33   Barcelona_Milan     44               0
5   Londen_Dublin      2        London_Dub     54               4
6   Londen_Dublin      2     London_Oxford     29               7
7   Madrid_Malaga     53              <NA>     NA              NA
8            <NA>     NA         Pisa_Luik     65              NA

我可以删除包含NA和group_by City.x的行,不过我会删除前两行中的一行。

如果我做了inner_join,我会收到以下消息:

代码语言:javascript
复制
    df3 <- stringdist_inner_join(df1, df2, by = "City", max_dist = 9, distance_col = "string_distance")

df3

> df3
           City.x value1            City.y value2 string_distance
1   Munchen_Paris     11    Munnich_Parijs     22               5
2   Munchen_Paris     21    Munnich_Parijs     22               5
3 Barcelona_Milan     33 Barcelona_Munster      2               6
4 Barcelona_Milan     33   Barcelona_Milan     44               0
5   Londen_Dublin      2        London_Dub     54               4
6   Londen_Dublin      2     London_Oxford     29               7

奇怪的是stringdist_semi_join没有显示df2的列吗?还有别的方法可以达到我在上面的第一张表格中寻找的结果吗?

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-10 19:00:21

半连接做什么(来自dplyr文档):

返回y中有匹配值的x中的所有行,使列与x保持一致。半连接与内部连接不同,因为内部连接将为y的每一行返回一行x,其中半连接永远不会重复x的行。

所以你所看到的行为是预料之中的。

您正在寻找一个内部连接:

返回y中有匹配值的x中的所有行,以及x和y中的所有列。如果x和y之间有多个匹配,则返回所有匹配的组合。

fuzzyjoin中,这称为stringdist_inner_join

代码语言:javascript
复制
df3 <- stringdist_inner_join(df1, df2, by = "City", max_dist = 9, distance_col = "string_distance")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61145788

复制
相关文章

相似问题

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