R中的模糊外连接/合并

2024-01-13

我有 2 个数据集,想要进行模糊连接。
这是两个数据集。

library(data.table)
# data1
dt1 <- fread("NAME                State type
              ABERCOMBIE TOWNSHIP   ND  TS
              ABERDEEN TOWNSHIP     NJ  TS
              ABERDEEN TOWNSHIP     SD  TS
              ABBOTSFORD CITY       WI  CI
              ABERDEEN CITY         WA  CI
              ADA TOWNSHIP          MI  TS
              ADAMS                 IL  TS", header = T)
# data2
dt2 <- fread("NAME               State  type
              ABERDEEN TWP N J    NJ    TS
              ABERDEEN WASH       WA    CI
              ABBOTSFORD WIS      WI    CI
              ADA TWP MICH        MI    TS
              ADA OHIO            OH    CI
              ADAMS MASS          MA    CI
              ADAMSVILLE ALA      AL    CI", header = T)

两个数据集具有相同的字符State and type;然而,列NAME不一样。他们很相似。
虽然我可以减去列NAME每个数据有3或4个图表,然后将它们合并,似乎由于观察量较大,正确率可能不高。

dt1$NameSubstr <- substr(dt1$NAME, 1, 4)
dt2$NameSubstr <- substr(dt2$NAME, 1, 4)
merge(dt1, dt2, by = c("NameSubstr", "State", "type"), all = T)

方法不好。

我检查包裹fuzzyjoin。但不确定我是否正确。

library(fuzzyjoin)
fuzzy_full_join(dt1, dt2, by = c("NAME" = "NAME", "State" = "State", "type" = "type"), match_fun = list(`!=`, `==`, `==`))  

# Results
                 NAME.x State.x type.x           NAME.y State.y type.y
 1:   ABERDEEN TOWNSHIP      NJ     TS ABERDEEN TWP N J      NJ     TS
 2:     ABBOTSFORD CITY      WI     CI   ABBOTSFORD WIS      WI     CI
 3:       ABERDEEN CITY      WA     CI    ABERDEEN WASH      WA     CI
 4:        ADA TOWNSHIP      MI     TS     ADA TWP MICH      MI     TS
 5: ABERCOMBIE TOWNSHIP      ND     TS             <NA>    <NA>   <NA>
 6:   ABERDEEN TOWNSHIP      SD     TS             <NA>    <NA>   <NA>
 7:               ADAMS      IL     TS             <NA>    <NA>   <NA>
 8:                <NA>    <NA>   <NA>         ADA OHIO      OH     CI
 9:                <NA>    <NA>   <NA>       ADAMS MASS      MA     CI
10:                <NA>    <NA>   <NA>   ADAMSVILLE ALA      AL     CI

本练习的结果是正确的,见下文。但是如果这两个数据中的任意一个NAME相同,则答案将不正确。
我在这两个数据中创建了一个新的观察结果。

dt1 <- fread("NAME  State   type
         ABERCOMBIE TOWNSHIP    ND  TS
         ABERDEEN TOWNSHIP  NJ  TS
         ABERDEEN TOWNSHIP  SD  TS
         ABBOTSFORD CITY    WI  CI
         ABERDEEN CITY  WA  CI
         ADA TOWNSHIP   MI  TS
         ADAMS  IL  TS
         THE SAME   AA  BB
         ", header = T)
dt2 <- fread("NAME  State   type
         ABERDEEN TWP N J   NJ  TS
         ABERDEEN WASH  WA  CI
         ABBOTSFORD WIS WI  CI
         ADA TWP MICH   MI  TS
         ADA OHIO   OH  CI
         ADAMS MASS MA  CI
         ADAMSVILLE ALA AL  CI
         THE SAME   AA  BB
         ", header = T)

fuzzy_full_join(dt1, dt2, by = c("NAME" = "NAME", "State" = "State", "type" = "type"), match_fun = list(`!=`, `==`, `==`))

                 NAME.x State.x type.x           NAME.y State.y type.y
 1:   ABERDEEN TOWNSHIP      NJ     TS ABERDEEN TWP N J      NJ     TS
 2:     ABBOTSFORD CITY      WI     CI   ABBOTSFORD WIS      WI     CI
 3:       ABERDEEN CITY      WA     CI    ABERDEEN WASH      WA     CI
 4:        ADA TOWNSHIP      MI     TS     ADA TWP MICH      MI     TS
 5: ABERCOMBIE TOWNSHIP      ND     TS             <NA>    <NA>   <NA>
 6:   ABERDEEN TOWNSHIP      SD     TS             <NA>    <NA>   <NA>
 7:               ADAMS      IL     TS             <NA>    <NA>   <NA>
 8:            THE SAME      AA     BB             <NA>    <NA>   <NA>
 9:                <NA>    <NA>   <NA>         ADA OHIO      OH     CI
10:                <NA>    <NA>   <NA>       ADAMS MASS      MA     CI
11:                <NA>    <NA>   <NA>   ADAMSVILLE ALA      AL     CI
12:                <NA>    <NA>   <NA>         THE SAME      AA     BB

这是不正确的结果。 有什么建议吗?

看来我不能使用fuzzy_full_join.


这是因为您要求 fuzzy_full_join 提供不匹配的名称(使用 !=),然后给出匹配的状态和类型(使用 == ==)。因此,如果在这种情况下所有三个都匹配,则不会显示。

您可以使用以下命令运行它两次:

match_fun = list(`!=`, `==`, `==`))
match_fun = list(`==`, `==`, `==`))
library(data.table); library(fuzzyjoin)
#> Warning: package 'data.table' was built under R version 3.5.2

dt1 <- fread("NAME   State   type
             ABERCOMBIETOWNSHIP    ND  TS
             ABERDEENTOWNSHIP  NJ  TS
             ABERDEENTOWNSHIP  SD  TS
             ABBOTSFORDCITY    WI  CI
             ABERDEENCITY  WA  CI
             ADATOWNSHIP   MI  TS
             ADAMS IL  TS
             THESAME   AA  BB
             ", header = T)
dt2 <- fread("NAME  State   type
             ABERDEENTWPNJ   NJ  TS
             ABERDEENWASH  WA  CI
             ABBOTSFORDWIS WI  CI
             ADATWPMICH   MI  TS
             ADAOHIO   OH  CI
             ADAMSMASS MA  CI
             ADAMSVILLEALA AL  CI
             THESAME   AA  BB
             ", header = T)

fuzzy_full_join(dt1, dt2, by = c("NAME" = "NAME", "State" = "State", "type" = "type"), match_fun = list(`!=`, `==`, `==`))
#>                 NAME.x State.x type.x        NAME.y State.y type.y
#>  1:   ABERDEENTOWNSHIP      NJ     TS ABERDEENTWPNJ      NJ     TS
#>  2:     ABBOTSFORDCITY      WI     CI ABBOTSFORDWIS      WI     CI
#>  3:       ABERDEENCITY      WA     CI  ABERDEENWASH      WA     CI
#>  4:        ADATOWNSHIP      MI     TS    ADATWPMICH      MI     TS
#>  5: ABERCOMBIETOWNSHIP      ND     TS          <NA>    <NA>   <NA>
#>  6:   ABERDEENTOWNSHIP      SD     TS          <NA>    <NA>   <NA>
#>  7:              ADAMS      IL     TS          <NA>    <NA>   <NA>
#>  8:            THESAME      AA     BB          <NA>    <NA>   <NA>
#>  9:               <NA>    <NA>   <NA>       ADAOHIO      OH     CI
#> 10:               <NA>    <NA>   <NA>     ADAMSMASS      MA     CI
#> 11:               <NA>    <NA>   <NA> ADAMSVILLEALA      AL     CI
#> 12:               <NA>    <NA>   <NA>       THESAME      AA     BB

fuzzy_full_join(dt1, dt2, by = c("NAME" = "NAME", "State" = "State", "type" = "type"), match_fun = list(`==`, `==`, `==`))
#>                 NAME.x State.x type.x        NAME.y State.y type.y
#>  1:            THESAME      AA     BB       THESAME      AA     BB
#>  2: ABERCOMBIETOWNSHIP      ND     TS          <NA>    <NA>   <NA>
#>  3:   ABERDEENTOWNSHIP      NJ     TS          <NA>    <NA>   <NA>
#>  4:   ABERDEENTOWNSHIP      SD     TS          <NA>    <NA>   <NA>
#>  5:     ABBOTSFORDCITY      WI     CI          <NA>    <NA>   <NA>
#>  6:       ABERDEENCITY      WA     CI          <NA>    <NA>   <NA>
#>  7:        ADATOWNSHIP      MI     TS          <NA>    <NA>   <NA>
#>  8:              ADAMS      IL     TS          <NA>    <NA>   <NA>
#>  9:               <NA>    <NA>   <NA> ABERDEENTWPNJ      NJ     TS
#> 10:               <NA>    <NA>   <NA>  ABERDEENWASH      WA     CI
#> 11:               <NA>    <NA>   <NA> ABBOTSFORDWIS      WI     CI
#> 12:               <NA>    <NA>   <NA>    ADATWPMICH      MI     TS
#> 13:               <NA>    <NA>   <NA>       ADAOHIO      OH     CI
#> 14:               <NA>    <NA>   <NA>     ADAMSMASS      MA     CI
#> 15:               <NA>    <NA>   <NA> ADAMSVILLEALA      AL     CI

Created on 2019-03-17 by the reprex package https://reprex.tidyverse.org (v0.2.1)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R中的模糊外连接/合并 的相关文章

  • 使用 sapply 的列表和矩阵

    我有一个也许是基本的问题 我在网上搜索过 我在读取文件时遇到问题 尽管如此 我还是按照 Konrad的建议设法读取了我的文件 我很欣赏这一点 How to get R to read in files from multiple subdi
  • 确定 R 中的组是否重复某个值

    我有一个包含许多列和行的数据 我想通过创建新的逻辑变量来确定某个组的值是否重复 相同 所以我的数据如下所示 v0 lt c 1 2 3 4 5 6 7 8 9 v1 lt c a b a c e c b b e v2 lt c R NA R
  • 在 R 中索引数据帧

    再会 我不明白这里的主题 就像它有效但我不明白为什么 我有这个数据库 planets df is pre loaded in your workspace Use order to create positions positions lt
  • 使用 ggplot 未完全填充等值线图

    我正在尝试使用以下方法绘制我的第一个填充等高线图ggplot 根据我的数据 我期待类似的结果 但我的结果是 a lt c 1 1 1 1 1 3 1 2 2 2 2 2 2 5 2 1 3 3 3 3 1 3 2 b lt c rep c
  • 禁用数据表更改跟踪

    有没有办法让数据表自动接受更改或在修改行时禁用更改跟踪 当更改数据表时 忘记调用DataTable AcceptChanges 可能会导致真正的问题 我认为整个要点DataTable是具有行版本控制和更改跟踪的额外好处 我认为您实际上无法禁
  • R源代码.调用函数[重复]

    这个问题在这里已经有答案了 我正在查看R中cov的source code 并遇到了一段我不太明白的代码 协方差的数学定义goes http en wikipedia org wiki Covariance here if method pe
  • 指定生存图的自定义时间点

    我正在努力使用以下方法创建生存 累积事件图ggsurvplot函数从survminer包裹 我想为我的绘图指定自定义时间点 但我不知道该怎么做 这xlim and break x by参数有点帮助 但它们创建了均匀间隔的时间点和比我想要的更
  • Mac OS X 10.13 上的 RStudio 在尝试使用 fix() 时出现 X11 不可用错误

    我已经使用自制程序在我的计算机上安装了 XQuartz 然后重新启动了我的计算机 当我尝试在 RStudio 中使用 fix 命令时 出现以下错误 gt College read csv College csv header T na st
  • 从频率表生成 data.frame

    我在 2 4 数组中有包含 500 个观察值的合成数据 datax array c 120 181 50 43 41 33 24 8 dim c 2 4 dimnames datax list gender c male female pu
  • R:install.packages 中出现错误:无法打开连接

    我试图安装 RINDSEL 包 但无法安装它 并且不断收到以下错误 install packages 中出错 无法打开连接 我从以下位置下载了该软件包 rindsel 1 0 2 zip 综合养殖平台 http old ibpdev net
  • R.scale() 和 sklearn.preprocessing.scale() 之间的区别

    我目前正在将数据分析从 R 转移到 Python 当在 R 中缩放数据集时 我将使用 R scale 根据我的理解 它将执行以下操作 x mean x sd x 为了替换该函数 我尝试使用 sklearn preprocessing sca
  • 为“facet_wrap”中的每列创建边框和标题

    我想在每个方面周围放置带有标签和标题的黑色边框facet wrap 与此类似的东西 样本数据 library tidyverse mtcars gt mutate gear factor gear levels c 4 3 5 gt ggp
  • 如何更改数据表中的少数列名称

    我有一个包含 10 列的数据表 town tc one two three four five six seven total 需要生成我正在使用的列 一 到 总计 的平均值 DTmean lt DT lapply SD mean by t
  • r caret 包中的 train 函数的模型输出尺寸巨大

    我正在使用 bagFDA 模型进行训练train r caret 包中的函数 并将模型输出保存为 Rdata 文件 输入文件大约有 300k 条记录 有 26 个变量 但输出 Rdata 大小为 3G 我只是运行以下命令 modelout
  • 使用 igraph 将边缘属性显示为标签

    我在 R 中使用 igraph 进行网络分析 我想在图中的每条线上显示边缘属性 下面是一个例子 df lt data frame a c 0 1 2 3 4 b c 3 4 5 6 7 nod lt data frame node c 0
  • 如何管理和处理 R 包中的补充数据

    我想在我的 R 包中添加补充数据 我知道关于LazyData true in DESCRIPTION 但不想使用它 因为示例数据相当大 所以我创建了一个目录 data 其中包含两个 RData文件和一个datalist 我添加使用tools
  • 使用 RMySQL 会干扰 RPostgreSQL

    我有一个 R 脚本 我想从 MySQL 数据库中提取一些数据 然后从 PostgreSQL 数据库中提取一些数据 但是 从 RMySQL 加载 MySQL 驱动程序会阻止我从以下位置加载 PostgreSQL 驱动程序 PostgreSQL
  • WPF MVVM将DataTable绑定到DataGrid不显示数据

    我有一个简单的控件 其中包含一个 DataGrid 其中 ItemsSource 绑定到 DataTable 当我填充 DataTable 时 我可以看到 DataGrid 中添加了行 但没有显示任何数据 我没有为此 DataGrid 使用
  • 列槽不足

    当尝试为 data table 中的每个变量 108 个变量 创建 12 个滞后时 我收到一条错误 指出列槽不足 此操作应创建大约 1200 个变量或列 Data A as data table Datos A Varnames names
  • ggplot堆叠条 - 隐藏标签但保留标签位置

    我在 ggplot 中有一个堆积条形图 其中 geom text 标签位于每个条形的中心 我想隐藏小条上的标签 以便图表看起来不会过于拥挤 我可以使用下面的代码来完成此操作 但它会弄乱标签的位置 正如您在下面的链接图片中看到的那样 它们不再

随机推荐

  • 使用竞争检测器时可以跳过特定测试吗?

    Go Race Detector 的 goroutine 限制为 8192 至少在我的系统上 我运行的一项测试是查看我的服务器代码如何处理大量同时打开的连接 现在我正在尝试 gt 15000 当我跑步时go test race 因此 该特定
  • listfragment 与我的主抽屉重叠

    我是Android新手 我正在创建一个应用程序 并且我有一个列表片段问题 因为列表显示但它与标题栏重叠 我必须添加边距顶部来改变它 而且我正在使用抽屉并且当我尝试时要打开它在选项抽屉上显示的列表 请让我粘贴代码和图像 以便您可以了解更多信息
  • ASP.NET 5 MVC 6 通用存储库模式

    一直在到处寻找教程什么的 我一直在尝试将 MVC5 的旧通用存储库模式实现到新的 MVC6 项目中 我设置了 3 个类库 Core Data and Service 但是有一个问题IDBset 似乎我的智能感知不喜欢它 我尝试添加Syste
  • Android 设备上的大型应用程序数据存储在哪里?

    我目前面临一个问题 我应该将我的对象结构存储在 Android 设备上 用例 我正在开始调用应用程序服务器 在异步任务 http developer android com reference android os AsyncTask ht
  • 确定给定金额的找零组合

    我的任务是使用暴力编写一个算法来确定不同方式的数量 以及给定数量的变化的相关组合 找零将使用以下硬币 便士 1 美分 镍币 5 美分 一角硬币 10 美分 和 25 美分 25 美分 e g 输入 16 表示变化16美分 输出 可以通过 6
  • 如何在Python中重塑networkx图?

    所以我创建了一种非常幼稚 可能效率低下 的生成哈斯图的方法 问题 我有 4 个维度 p q r s 我想统一显示它 超正方体 但我不知道如何重塑它 如何在 Python 中重塑 networkx 图 我见过一些人们使用的例子spring l
  • 调用 Windows 证书导出向导 .NET [重复]

    这个问题在这里已经有答案了 有谁知道如何在 C NET 中以编程方式调用 显示 Windows 证书导出向导 同时提供 X509 证书 我认为你必须 P InvokeCryptUIWiz 导出 http CryptUIWizExport来自
  • Python 中的最近邻搜索,无需 k-d 树

    我从 C 背景开始学习 Python 我正在寻找一种快速而简单的方法来查找多维点的 2D numpy 数组 也是 numpy 数组 中某些多维查询点的最近 最近邻居 我知道 scipy 有一个 k d 树 但我不认为这是我想要的 首先 我将
  • 为什么 int 到 long long int 的隐式转换在 C++ 中给出了意想不到的答案?

    我读到了这个转换int to long long int是升级 因此认为不应该有任何问题 因为不会丢失数据 与反之亦然的转换不同 但是当我乘以二时ints 具有较大的价值并将其存储在long long int 它向我显示负数 Eg int
  • Google Hangouts 网站按钮

    是否可以在我的企业网站上添加一个 Google Hangouts 按钮 单击该按钮即可向我发起呼叫 我有一个商业网站 我希望任何人都可以像嵌入在网站页面上的 Skype 按钮一样进行呼叫 我遇到的问题是我去了https developers
  • 如何在两个设备之间共享我使用 sqlite 数据库存储的所有数据,以便通过转储到另一个设备中来重用数据

    我已经实现了一个应用程序iPhone 目标 c 我用过SQLITE对于数据库 现在我需要分享数据 分享数据 我需要通过邮件发送数据 我附上我的数据库文件 可能是 csv 格式 通过转储数据在其他应用程序中重新使用我的数据 任何有用的回复 提
  • 命名空间“Microsoft.EntityFrameworkCore”中不存在类型或命名空间名称“Relational”

    在 VS 2017 中的 ASP Net Core 1 1 Web 应用程序中 我需要引用该包 Microsoft EntityFrameworkCore Relational 这是为了调用带有结果集的存储过程 如下所述 如何在 Entit
  • 使用 jsZip 将 url 中的图像添加到 zip 文件

    我正在尝试使用 jsZip 创建一个 zip 文件 zip 文件的内容是来自网络的图像 我创建了以下代码 但是当我运行它时 我得到的只是一个 22kb 的空 zip 文件
  • 沿 X 方向标记

    我从未使用过 Google 地图 API 对于我正在从事的学校项目 我需要在两个位置之间找到方向 这是简单的部分 我想我可以做到这一点 然而我还需要打一个X标记 沿途每 10 英里 这可能吗 谢谢 好的 这里有一个可行的解决方案 每 200
  • 将元素颜色重置为默认样式表颜色(jQuery、JavaScript)

    我需要能够在输入字段可能通过 javascript 更改为不同的值后将其重置回其原始颜色 问题是我不想对值进行硬编码 以防样式表发生变化 我想使用页面上使用的默认颜色 像这样重置颜色很好吗 或者有更好的方法吗 theinput css co
  • 比这更通用的 parfoldr

    我的目标是拥有并行的foldr 功能 起初 似乎 实现起来相当简单 这就是我的想法 首先根据输入列表的数量将输入列表分成多个分区 核心 numCapabilities 然后将foldr应用到每个分区 其中 将产生每个分区的折叠值列表 然后做
  • 使用 bash 仅提取传入电子邮件的正文部分

    I use offlineimap将邮件提取到 Maildir 文件夹中 我想自动解析 Maildir 文件夹中的所有新传入电子邮件 并仅将 发件人 主题 和 正文 作为即时消息发送到其他地方 所以我尝试处理所有邮件 MPATH Mail
  • Python SMTP 错误 10060

    有人可以给我一些关于为什么会出现这种情况的见解吗 mailServer smtplib SMTP smtp gmail com 587 和这个 mailServer smtplib SMTP smtp gmail com 587 正在说这样
  • 如何在 Team City 中运行所有 NUnit 测试?

    我们每次提交时都使用 TeamCity 6 0 构建 VS C 解决方案 构建完成后 另一个测试 TC 项目就会运行 为了让开发人员可以添加 删除 编辑 VS 单元测试项目 如何让 TeamCity 使用 sln 文件或搜索测试 dll 我
  • R中的模糊外连接/合并

    我有 2 个数据集 想要进行模糊连接 这是两个数据集 library data table data1 dt1 lt fread NAME State type ABERCOMBIE TOWNSHIP ND TS ABERDEEN TOWN