问题标签 [fuzzyjoin]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
626 浏览

r - 如何限制模糊连接只返回一个匹配项

我正在尝试在 R 中创建一个程序,用三位数的机场代码替换城市名称或机场名称。我想做模糊匹配以提供更大的灵活性,因为我试图替换的城市/机场名称的数据来自许多不同的来源。我的问题是,通过左加入模糊匹配,我似乎无法找到一种方法,只从右表(代码)中将最接近的匹配带回左表(名称)。

例如:乔治亚州奥古斯塔市与乔治亚州奥古斯塔和缅因州奥古斯塔进行了匹配,并复制了数据。我不想限制最大距离,因为我仍然希望具有灵活性,但我不能让我的数据被复制。我想找到一种方法来进行部分字符串匹配,但只带回最接近的结果。

我试过使用fuzzyjoin 包,但据我所知,没有办法只限制一个匹配或只限制最佳匹配。我知道在 pmatch 中有一个禁止重复的调用,但我找不到使 pmatch 作为连接工作的方法。

这是我正在使用的代码,stringdist 是 R 中的模糊连接包的函数。数据集“数据”包含城市名称、航班数量和其他乘客信息。“orig”数据集有一列城市/机场名称和机场代码

0 投票
2 回答
64 浏览

r - R 模糊加入最近的先前记录

我想通过 ID 连接两个表 A 和 B,并在 B 中找到 A[date] 之前的最近日期。

经过一番搜索,似乎fuzzyjoin允许加入日期范围:

问题是这将返回许多记录(如果它们存在于 B 中),而我只想要最新的。

关于如何进行的任何想法?

编辑 :

预期输出:

0 投票
1 回答
800 浏览

r - 一个数据集中多列的模糊连接字符串

我想将一列 (df2$brands) 与许多其他包含相同字符串但有一些小的拼写错误的列 (df1$F6_1:f6_12) 模糊匹配。

我有两个数据集:

df1:

df2:

我尝试使用来自fuzzyjoin 库的stringdist_left_join() 函数,该函数运行良好。

这仅适用于一列。但是,我想在完整的 df1 数据集上执行此操作。这可以通过模糊连接每一列并最终将它们加在一起来解决。但是应该有一种更简单更方便的方法来做到这一点。

我的输出应该是这样的:

0 投票
1 回答
409 浏览

r - 如何在数据框中进行一次模糊匹配和一次精确匹配?

我希望能够模糊匹配一列并精确匹配另一列。

假设我 df1 看起来像这样:

在此处输入图像描述

df2 看起来像这样:

在此处输入图像描述

我想模糊匹配“名称”但精确匹配“年份”。所以“Ashley”和“Ashlee”将是匹配的。这是我到目前为止所拥有的:

不过,它似乎过度匹配。不知道发生了什么。

0 投票
1 回答
2081 浏览

r - 与R中的日期模糊连接

我正在开展一个项目,在该项目中,我根据各国体育比赛的结果分析国家内的个人调查数据,但我不确定产生我想要的合并的最有效方法是什么。

我正在处理两个单独的数据集。一个包含嵌套在国家/地区内的个人级别数据。数据可能如下所示:

另一个有国家匹配级别的数据,看起来像这样:

在这个例子中,只有一场比赛,在 2000 年 1 月 2 日进行,A 国输给了 B 国。我想执行 afuzzy_join以便与这里left_join相反,即使日期不是精确的。match_dataindividual_data

我想在 3 天的范围内执行此操作,并且我想指示在此范围内比赛前后有多少天。最终产品看起来像这样:

谁能帮我吗?我一直在为如何完成这项工作而苦苦挣扎。这是我迄今为止尝试过的:

但我收到以下错误:Error in which(m) : argument to 'which' is not logical

如果有人知道,作为参考,我正在尝试复制Depeteris-Chauvin 等人的结果。2018 年

0 投票
3 回答
216 浏览

r - 如何通过字符串列半连接两个数据帧,其中一个以冒号分隔

我有两个数据框,dfa并且dfb

看起来像这样:

dfa是我感兴趣的基因列表:我想保留它们出现的dfb,注意数字(MUC1不是)。我的应该是这样的: MUC16new_df

我的问题是常规dplyr::semi_join()确实完全匹配,这没有考虑到dfb$gene_names可以包含用 . 分隔的基因这一事实"; "。意思是用这个例子,"MET"不保留。

我试图调查fuzzyjoin::regex_semi_join,但我不能让它做我想要的......

欢迎使用 tidyverse 解决方案。(也许有stringr?!)

编辑:后续问题...

我将如何进行倒数anti_join?简单地更改semi_joinanti_join这种方法是行不通的,因为该行在MET; BLEP不应该出现的时候出现了......

filter(gene_name == new_col)在使用提供的简单数据集之后添加一个anti_join,但如果我像这样扭曲它:

……然后就没有了。在这里和我的真实数据集中,dfa不包含分号,它只是一列单个基因名称。但是dfb包含了很多信息,以及分号的多种组合...

0 投票
1 回答
230 浏览

r - 使用 roll = "nearest" 限制合并范围

我有两个要合并的数据库。从这个链接:做一个“模糊”和非模糊,多对一合并 data.table。我知道我可以合并这些 data.tables,当没有直接匹配时,最近可用的年份如下:

我对此有两个问题。

1)编辑:这个问题是错字的结果

2) NLD 2014indfANLD 2018in匹配dfB。如果我认为 4 年的差异太大,我想将其限制为两年,我该怎么办?

当我想限制 和 之间允许的年数时该怎么dfAdfB

0 投票
1 回答
208 浏览

r - 模糊连接 - 匹配一侧

我试图从一个表(myChickWts)中收集重量值,这些值是在另一个表(chickblood)中记录的每个血样之前一周收集的。我想从每个血样之前的一周中获取血日期和相关重量的列表。我尝试了几种不同的方法,并且在我的结果中包含的血样日期之后不断获取日期。

在此示例中,匹配返回的日期都在 (1/9, 1/11, 1/13) 和 (1/15) 血液日期之前。我怎样才能匹配这两个表?我也尝试了 difference_join,但它在我的其他结果之前 7 天和之后 7 天返回了结果 - 再次,不是我想要的。

导入数据(reprex 的样本数据)

确定体重日期是否在验血日期前一周。

获取过去 7 天内每个血液日期和所有匹配体重的表格。这是行不通的。

我也尝试过使用differ_join,但在这种情况下,我似乎无法弄清楚如何让它与小鸡匹配,并且它会在日期之前和之后返回。

我试过使用 lubridate 中的 %within% ,但没有成功。这会返回一个错误,我不确定为什么。

0 投票
2 回答
461 浏览

r - 带有 2 个大数据帧的模糊连接

这是我的例子:

我想要实现的是:

如果 df_2 中的一个名称(至少近似)与 df_1 中的名称匹配,那么我想在 df_1 中添加相应的电话号码。

基本上,这是一种模糊的左连接,但我没有成功。

事实上,我真正的 df_1 有 30.000 行,而我真正的 df_2 有 500.000 行。有没有快速的方法来做到这一点?

谢谢!

编辑:

当我使用迄今为止提供的答案遇到内存问题时,我需要更改和澄清我的示例。(我使用的是 16 GB RAM 的 Windows 笔记本。)

非常感谢任何有用的评论和答案。

0 投票
2 回答
254 浏览

r - 如何在多列上加入数据框并在一个列上进行模糊匹配?

我正在尝试使用年份、品牌和型号将来自 NHTSA 的解码 VIN 数据与来自fueleconomy.gov 的车辆数据连接起来。以下是我尝试加入的数据示例:

我在尝试完成此加入时遇到了多个问题。

  1. 我需要使用 make 和 year 加入数据,但 make 需要不区分大小写。
  2. 我需要对模型执行不精确匹配,并且可能对模型的 mpg 值进行平均,因为每个模型的fueleconomy.gov 数据中有多个条目(例如2WD、4WD、不同的发动机尺寸、混合动力等)。

我参考了以下问题来尝试解决这个谜语:

我还联系了fueleconomy.gov 和NHTSA,看看他们是否有能力加入基于车辆ID 的数据,但我想问问社区是否也有一个简单的解决方案。