问题标签 [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.
r - R中的模糊左连接人全名 - 处理棘手的边缘情况(无法安装模糊连接)
这是来自两个需要左连接在一起的表中的人员全名的示例数据,其中df1
和 左侧表,以及df2
右侧:
关于这里的棘手情况/边缘情况的一些评论:
- 这是一个左连接,因此
output_df
应该具有与左侧数据框相同的行数df1
。 - 左连接不应该被相似的名字混淆。
Michael Gadson
-->Mike Gadson
,而不是其他迈克的名字之一。 - 左连接不应该被颠倒的名字混淆。(
Ricky Smith
-->Rick Smith
,不是Smith Rickie
) - 左连接不应该被
III
名称的后缀或额外的空格或符号(De Andre'
vsDeAndre
)混淆
编辑:我尝试了以下输出:
它做得很好,但仍然不完美。最值得注意的是,Mike Gardnero
并且Smith Rickie
在使用jaccard
with max_dist
of 0.3 时会重复,因为右侧有多行满足相似性标准......但是,我们的输出不应创建这些重复项(也许将右侧的值保留为相似度最高)。
r - 基于部分字符串匹配比较两个数据帧的两列
我有两个示例数据框,df1
如下df2
所示。
df1
具有选定的网球比赛装置列表,其中包含球员姓名 ( player1_name
, player_name2
) 和比赛日期。此处为玩家使用全名。
df2
具有每个日期的所有网球比赛结果 ( winner
, ) 的列表。loser
在这里,使用名字的第一个字母和完整的姓氏。固定装置和结果的球员姓名是从不同的网站上抓取的。因此,在某些情况下,姓氏可能不完全匹配。考虑到这一点,我想添加一个新列df1
,说明 player1 或 player2 是否赢了。基本上,我想通过给定相同日期的某些部分匹配方式从 df2映射player1_name
和player2_name
从到赢家和输家。df1
我创建了一个自定义函数,该函数可以使用 RecordLinkage 包将字符串与字符串向量中最接近的匹配项进行匹配。我可以使用这个函数编写一个超级低效的代码,但在去那里之前,我想看看我是否能以更有效的方式来做。
r - 两个数据库的模糊匹配和精确匹配
我有两个数据库。第一个有大约 70k 行和 3 列。第二个有 790k 行 2 列。两个数据库都有一个共同的变量grantee_name
。我想基于此将第一个数据库的每一行与第二个数据库的一个或多个行匹配grantee_name
。请注意,这merge
不起作用,因为grantee_name
不完全匹配。有不同的拼写等。所以,我正在使用该fuzzyjoin
软件包并尝试以下操作:
上面的例子很清楚,可以提供一些好的匹配和一些不太好的匹配。请注意,例如,10 THOUSAND WINDOWS
将匹配最好,10 THOUSAND MUSKETEERS INC
但这并不意味着它是一个很好的匹配。数据中的某处会有更好的匹配filings
(上面未显示)。在这个阶段这无关紧要。
所以,我尝试了以下方法:
对 R 来说是全新的。这会导致错误:(
cannot allocate vector of size 375GB
当然是大数据库)。forfuzzy
始终有效的 100 行样本。所以,我想一次迭代一个 100 行的列表。
我尝试了以下方法:
我也试过上面用mclapply
而不是lapply
. 即使我尝试了设置 3 个 CPU 的高性能集群,每个 CPU 有 480G 内存并mclapply
与选项一起使用,也会发生同样的错误mc.cores=3
。也许foreach
命令可以提供帮助,但我不知道如何实现它。
有人建议我使用purrr
andrepurrrsive
包,所以我尝试以下方法:
by=grantee_name
在声明中出现新手错误之后,这似乎有效。但是,它需要很长时间,我不确定它是否会起作用。forfuzzy
一个包含 100 行的示例列表n=10
(因此 10 个列表,每个列表 10 行)已经运行了 50 分钟,但仍然没有结果。
r - R - 将大数据帧拆分为几个较小的数据帧,对每个数据帧执行模糊连接并输出到单个数据帧
我有 2 个数据框,我需要使用fuzzyjoin 函数加入它们。我尝试在整个数据帧上执行该功能,但没有足够的内存来执行此操作。其中一个数据帧 [UPRN] 充当源数据,保存地址的唯一标识符,另一个 [Address] 保存需要与唯一标识符匹配的地址。
我知道有一些与以下相关的问题,但我发现没有一个问题似乎在回答我的问题。
我希望将大约 45000 行的 [Address] 拆分为 5000 行的可管理块(读取较小的数据帧),仅按行位置。然后我想使用这些小数据帧来模糊加入 [UPRN] 数据帧。例如 [Address1] 读取前 5000 行,应用模糊连接并输出 [Join1],然后 [Address2] 读取第 5001 到 10000 行,应用模糊连接并输出 [Join2] 等等。
下面是我所追求的一个小例子;
然后,我想将 Address1 依次连接到 UPRN,然后将 Address2 连接到 UPRN,输出到单个文件(然后我可以附加)或输出到同一个文件。我已经拥有的连接功能,只需要一种方法来调用每个单独的数据框。我将如何去做这样的事情?我应该寻找哪些功能?
r - 数据框中的部分匹配列以创建新的数据框
我遇到了编码和部分匹配的问题。
我有两个数据帧,A 和 B。A 通过 UTF-8 编码调用,B 在 Latin1 上调用。尽管我不确定,但这可能已经是问题的一部分。这是我知道如何正确导入它的唯一方法。
编辑:我应该澄清一下。这只是样本数据。两个数据框都包含大量的行和其他列。
我一直在尝试提取 B$Employee$ 并将它们与 A$Name 部分匹配,以创建一个包含 B$Category 的新 df C。这是我想要的输出。
编辑:使用类别,我还想包括 A 和 B 的所有其他列,不包括员工。
到目前为止,我已经使用fuzzyjoin 包匹配了80% 的字符。
主要问题似乎是这些奇怪的拉丁字符,例如 Ö、ß 等,或者有时出现在“Aké”等名称的末尾。结果似乎因名称而异。
我怎样才能让它部分匹配所有的名字?
r - 模糊左连接精确+部分字符串匹配
我正在使用fuzzy_left_join 函数来匹配具有精确+模糊匹配的表。
我使用的match_fun参数之一涉及检查字符串的一部分是否包含在另一个字符串中。仅使用精确匹配时,它返回值,但添加下面的函数时,连接仅返回 NA 值。
比较字符串的函数:
这个想法是,在第一个表X上,名为“Names”的列具有像“a/b/c”这样的行值,而在第二个表Y的列“Names”上,值也像“a/d/e”,因此字符串的“a”部分也包含在第二个值中,并且应该返回 TRUE(并因此允许加入)。
使用简单连接时,没有自定义函数,它可以工作并找到一些值:
但是在添加自定义功能时:
你能不能给点想法?
r - Curly curly 将列名传递给 mutate 或 regex_left_join 返回错误,找不到赋值运算符`:=`
我在控制台中收到错误:
错误:=
({:找不到函数“:=”
我只使用了一个模糊连接(大卫罗宾逊)和 tidyverse 包。该函数被接受,没有语法错误。在执行时,错误被抛出给我。可能是什么原因?
这是示例数据
r - 限制模糊连接计算
我正在尝试执行一项事件研究,以评估特定个人在经历特定治疗(治疗 E)后是否参与特定事件(事件 P)。我通过观察事件 E 并尝试与事件 P 的观察合并来做到这一点,然后我将创建一个区间并对其进行评估,如下例所示:
这个过程很好,除了两个问题:1)我的实际数据太大以至于无法通过fuzzy_left_join()
复制(我只需要相对于特定事件 E 的事件 P 的最快实例,而不是所有实例对于经历事件 E 的个人的事件 P),2)我需要保留没有事件 P 的观察(个人 3/类别 c 经历事件 E,但从不跟进事件 P,并且由于 NA 而被删除)。
有小费吗?我相信我可以通过额外的合并来解决问题 2,但在问题 1 上遇到了障碍。
r - R:如何通过列匹配名称在列表中绑定数据框?还是通过部分leftjoin?
我的问题是:
我有一个包含 8 个数据框的列表,这些数据框具有不同的列名和相似的行名,所以我想通过列匹配来绑定这些数据框。例如,在这种情况下
我需要对齐 Yd;Yc;Yb;Ya 列的行。
我最近的方法是:
所以我有一个这样的数据框:
但我需要这样的东西:
你能帮我吗?谢谢!