R 中复杂的非等值合并

2023-11-25

我正在尝试在两个表之间进行复杂的非等值连接。我受到了上次 userR 2016 中的演示的启发(https://channel9.msdn.com/events/useR-international-R-User-conference/useR2016/Efficient-in-memory-non-equi-joins-using-datatable)这让我相信这对于 data.table 来说是一个合适的任务。我的表 1 如下所示:

library(data.table)
sp <- c("SAB","SAB","SAB","SAB","EPN","EPN","BOP","BOP","BOP","BOP","BOP","PET","PET","PET")
dbh <- c(10,12,16,22,12,16,10,12,14,20,26,12,16,18)
dt1 <- data.table(sp,dbh)
dt1
     sp dbh
 1: SAB  10
 2: SAB  12
 3: SAB  16
 4: SAB  22
 5: EPN  12
 6: EPN  16
 7: BOP  10
 8: BOP  12
 9: BOP  14
10: BOP  20
11: BOP  26
12: PET  12
13: PET  16
14: PET  18

这是树木及其胸径的列表。我的第二个表(如下)给出了一个通用表,该表为每个树种提供了一系列胸径,以对尺寸类别或树进行分类:

gr_sp <- c("RES","RES","RES","RES","RES","RES", "DEC", "DEC", "DEC", "DEC", "DEC", "DEC")
sp <- c("SAB","SAB", "SAB", "EPN", "EPN", "EPN", "BOP", "BOP", "BOP", "PET", "PET", "PET")
dbh_min <- c(10, 16, 22, 10, 14, 20, 10, 18, 24, 10, 20, 26)
dbh_max <- c(14, 20, 30, 12, 18, 30, 16, 22, 30, 18, 24, 30)
dhb_clas <- c("s", "m", "l", "s", "m", "l", "s", "m", "l", "s", "m", "l")

dt2 <- data.table(gr_sp, sp, dbh_min, dbh_max, dhb_clas)
dt2
    gr_sp  sp dbh_min dbh_max dhb_clas
 1:   RES SAB      10      14        s
 2:   RES SAB      16      20        m
 3:   RES SAB      22      30        l
 4:   RES EPN      10      12        s
 5:   RES EPN      14      18        m
 6:   RES EPN      20      30        l
 7:   DEC BOP      10      16        s
 8:   DEC BOP      18      22        m
 9:   DEC BOP      24      30        l
10:   DEC PET      10      18        s
11:   DEC PET      20      24        m
12:   DEC PET      26      30        l

我希望我的最终表是按物种(“sp”字段)连接的两个表,并且在“DBH_MIN”和“DBH_MAX”规定的 dhb 范围内。这将使我的表格看起来像:

data.table(dt1, gr_sp = c("RES","RES","RES","RES","RES","RES","DEC","DEC","DEC","DEC","DEC","DEC","DEC","DEC"), dhb_clas = c("s","s","m","l","s","m","s","s","s","m","l","s","s","s"))
     sp dbh gr_sp dhb_clas
 1: SAB  10   RES        s
 2: SAB  12   RES        s
 3: SAB  16   RES        m
 4: SAB  22   RES        l
 5: EPN  12   RES        s
 6: EPN  16   RES        m
 7: BOP  10   DEC        s
 8: BOP  12   DEC        s
 9: BOP  14   DEC        s
10: BOP  20   DEC        m
11: BOP  26   DEC        l
12: PET  12   DEC        s
13: PET  16   DEC        s
14: PET  18   DEC        s

我尝试过类似的事情:

dt1[dt2, on=.(sp=sp, dbh>=dbh_min, dbh<=dbh_max)]

这给出了太多行......

感谢您的帮助


所以我非常接近。我有两个问题,首先是 data.table 包安装错误(数据表错误找不到函数“。”)导致了一个模糊的错误。

解决这个问题后,我走近发现:

dt1[dt2, on=.(sp=sp, dbh>=dbh_min, dbh<=dbh_max), nomatch=0]

用糟糕的 DBH 色谱柱给了我我想要的东西。反转命令:

dt2[dt1, on=.(sp=sp, dbh_min<=dbh, dbh_max>=dbh)]

仅用一列无用的额外列解决了该问题。

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

R 中复杂的非等值合并 的相关文章

  • R:如何将描述小时、分钟和秒的非直观字符串转换为可行的 POSIXct 格式以执行标准算术?

    我在 R 中有一个数据集 其值采用小时 分钟和秒格式 然而 有些值只有小时和分钟 有些值只有分钟和秒 有些值只有分钟 有些值只有秒 它的格式也不是很有利 样本数据如下 example lt as data frame c 22h28m 17
  • 如何上下移动字符串并从中删除相似的字符串?

    我问了一个可能不太清楚的问题 所以我尝试用一 种可以理解的方式来解释它 这是我的数据 我的数据看起来像这样 看起来像这样 V1 V2 V3 1 Q9UNZ5 Q9Y2W1 2 Q9ULV4 Q6QEF8 3 Q9UNZ5 4 Q9H6F5
  • R 带有列和行的分面 qqplots

    我需要使用按行和列的构面创建 qqplot 我了解如何用列和行绘制分面图 但我不确定如何设置我的数据 最终 我想按列和行对数据集进行分组 然后按升序对 建模 结果和 观察到 结果进行排序 同时添加带有 行 组的列和带有 列 组的列 我一直在
  • R中无法连接odbc数据库

    我一直在尝试使用以下命令将我公司的 DMS 连接到 RodbcConnect命令 但收到以下消息 myConn lt odbcConnect NZSQL uid cejacobson pwd password Warning message
  • mlogit:需要 TRUE/FALSE 时缺少值

    我有来自离散选择实验 DCE 的数据 该实验研究了来自不同行业的个人的招聘偏好 我已经格式化为长格式 我想使用 mlogit 进行建模 我已导出数据 并且可以使用 asclogit 命令在 Stata 中成功运行模型 但在 R 中运行时遇到
  • ggsubplot 是否适用于 R 3.2.1+?

    CRAN 提供的 ggsubplot 版本与 R 的最新版本 例如 3 1 1 不兼容 运行 ggsubplot 示例会返回以下错误 Error in layout base data vars drop drop At least one
  • 更新两组单选按钮 - 闪亮

    我问了这个问题 反应式更新两组单选按钮 闪亮 https stackoverflow com questions 35040579 update two sets of radiobuttons reactively shiny 昨天 但也
  • 如何在 R Markdown 中的内联 LateX 方程中输出 R 变量的值(即动态更新)

    我无法找到一种方法将 r 代码实现到 R markdown 中的内联 LateX 方程中 目标是如果变量 值 发生变化 则不必对它们的值进行硬编码 Given values lt c 1 4 2 5 7 9 avg lt sum value
  • 跨类别和列自动化卡方

    我有一个调查数据框 其中包含几个问题 列 编码为 1 同意 0 不同意 受访者 行 根据 年龄 年轻 中年 老年 地区 东 中 西 等指标进行分类 大约有30个类别总共 3个年龄 3个地区 2个性别 11个职业等 在每个指标中 类别不重叠且
  • Shiny :针对所有错误显示一条消息

    我在 R 的 Shiny 中有一个应用程序 我想处理消息 以便用户看不到发生了什么错误 我知道通过 tags style type text css shiny output error visibility hidden shiny ou
  • 使用 R 下载压缩数据文件、提取并导入 .csv

    我正在尝试使用以下方法从网页下载并提取 csv 文件R 这个问题是重复的使用 R 下载压缩数据文件 提取和导入数据 https stackoverflow com questions 3053833 using r to download
  • 如何创建 highcharter 事件函数以在 Shiny R 中创建“下拉函数”

    我正在建造一个shiny应用程序 我想要完成的事情之一是创建一个下拉菜单 我想将劳动力变量绘制为不同级别的年份变量的函数 请参阅下面的示例数据框 year level 2 level 3 labour 1 2013 10 101 1 2 2
  • 在zooreg时间序列中查找非唯一索引条目时遇到问题

    我有几年的数据正在尝试将其转化为动物园对象 Dropbox 上的 csv https www dropbox com sh vg8w8pt16e0v3xs AABKtWqDkPu9JVKpwBXO36VOa dl 0 一旦数据被强制转换为动
  • 连接树状图和热图

    我有一个heatmap 一组样本的基因表达 set seed 10 mat lt matrix rnorm 24 10 mean 1 sd 2 nrow 24 ncol 10 dimnames list paste g 1 24 sep p
  • R 获取子字符串和正则表达式?

    我有一组文件名字符串 我想提取 符号之后但文件扩展名之前的所有字符 例如 文件名之一是 HelloWorld you txt 我想返回字符串you 这是我的代码 hashPos grep name fixed TRUE dotPos len
  • 使用 R 将日期格式的字符串列表/向量转换为 posix 日期类

    我有一个日期格式的字符串列表 我想将其转换为可以使用 R 操作的 posix 日期列表 我该怎么做 这就是我所拥有的 但我最终得到了一个列表 a lt c 2009 01 01 00 00 00 2009 01 01 00 00 00 z
  • R中具有特定条件的多列变异

    我有这个数据 M1 M2 M3 UCL 1 2 3 1 5 我想在这种情况下创建新列 如果M1大于UCL MM1将为 UP 否则为 NULL 如果M2大于UCL MM2将为 UP 否则为 NULL 如果M3大于UCL MM3将为 UP 否则
  • 如何将 Shiny 中生成的反应图传递到 Rmarkdown 以生成动态报告

    简而言之 我希望能够通过单击按钮从我的闪亮应用程序生成动态 Rmarkdown 报告文件 pdf 或 html 为此 我想我将使用 Shiny 的参数化报告 但不知何故 我无法将单个谜题转移到所需的目标 使用此代码 我们可以在 R Shin
  • ggplot 按因子和梯度颜色

    我正在尝试绘制一个对两个变量 一个因子和一个强度 进行着色的图 我希望每个因素都是不同的颜色 并且我希望强度是白色和该颜色之间的渐变 到目前为止 我已经使用了诸如对因子进行分面等技术 将颜色设置为两个变量之间的相互作用 并将颜色设置为因子并
  • 从 leafletProxy() 返回渲染的传单地图

    是否可以在渲染后在 Shiny 中检索传单地图 下面是一个代码示例 展示了如何生成地图leaflet 与返回的不同leafletProxy 即使它们在渲染时看起来完全相同 是否有一个功能可能不同于leafletProxy 获取实际的 htm

随机推荐

  • 测试点是否在某个矩形内

    我有一大堆矩形 它们的大小都相同 我正在生成不应该落在这些矩形中的随机点 所以我想要做的是测试生成的点是否位于其中一个矩形中 如果是 则生成一个新点 使用 R 树似乎可行 但它们实际上适用于矩形而不是点 我可以使用 R 树算法的修改版本 该
  • 将所有源文件一次传递给编译器有什么好处吗?

    我读过 整个程序优化 wpo 和 链接时间代码生成 ltcg 我想知道如果我将所有源代码从 cli 一次性传递给编译器 如 g a cpp b cpp 是否会进行更多模块间分析 或者这只是启用这些标志之一 编译器之间对此有区别吗 例如 英特
  • 直接从Java执行JSP

    我需要执行一个JSP 但我需要直接从 Java 而不使用 Tomcat 或任何其他 servlet 容器 编译 JSP 也是一件好事 但不是必需的 我认为 org apache jasper 包可能很适合这样做 但我在网上找不到任何好的示例
  • 登录时在 Windows 7 中自动运行 bat 脚本

    我最近从已故的祖母那里购买了一台 Windows 7 笔记本电脑 我一直用它来做工作和其他事情 我决定使用 VirtualBox 创建一个虚拟机 现在我想在 Windows 7 主机 计算机上创建一个用户 以便当我登录到该用户时它会自动运行
  • Android:AutoCompleteTextView 在未输入文本时显示建议

    我在用AutoCompleteTextView 当用户单击它时 我想显示建议 即使它没有文本 但是setThreshold 0 工作原理与setThreshold 1 因此用户必须输入至少 1 个字符才能显示建议 This is 记录的行为
  • 检查实例是否属于某种类型

    用它来检查是否c是一个实例TForm c GetType Name CompareTo TForm 0 除了使用之外 是否还有更类型安全的方法来做到这一点string作为参数CompareTo 这里的不同答案有两种不同的含义 如果你想检查一
  • 尝试从 Django 中的 POST 解析 `request.body` [重复]

    这个问题在这里已经有答案了 由于某种原因 我无法弄清楚为什么 Django 不处理我的request body内容正确 正在发送中JSON格式 并查看Network开发工具中的选项卡将其显示为请求负载 creator creatorname
  • 如何在字符串中使用反斜杠 (\)?

    我尝试了很多方法来获得单反斜杠从一个executed 我的意思不是来自的输入html 我可以得到特殊字符作为制表符 新行和许多其他内容 然后将它们转义为 t or n or someother character 但当 a 时我无法得到一个
  • 如何判断 Chrome 扩展是由真实用户安装还是由我在开发过程中安装?

    我在 Chrome 扩展程序中使用 Analytics 我只想在真人 不是我正在使用它时 使用扩展时才执行分析代码 以下任何一项是否可行 哪一项是最好的 确定扩展是打包安装还是解包安装 我认为这是最好的 因为解压显然意味着它 正在开发中 并
  • 值限制:类型“bar”已被推断为具有泛型类型

    在下面的代码片段中 我不明白为什么我必须撰写f and g方式函数foo可以以及为什么它不能按功能方式工作bar尝试去做 let f a b a b let g a a b a a let gt f1 f2 fun a b gt let x
  • 在类型 ' 上找不到带有类型 'string' 参数的索引签名

    我正在开发我的第一个 firebase typescript 函数项目 我有以下代码片段 const files status src api status f js invite src api invite f js user src
  • 如何将java序列化对象写入和读取到文件中

    我将把多个对象写入一个文件 然后在代码的另一部分检索它们 我的代码没有错误 但无法正常工作 您能帮我找出我的代码有什么问题吗 我从不同的网站阅读了不同的代码 但没有一个对我有用 这是我将对象写入文件的代码 MyClassList 是一个数组
  • 按下按钮时播放声音 - android

    我有这个代码 package com tct soundTouch import android app Activity import android media MediaPlayer import android os Bundle
  • 在 openSUSE 上安装最新的 Python

    我使用 Zypper 包管理器在 openSUSE 系统 参见下面的版本 上安装了 Python 这为我提供了 Python 3 2 但某些包需要 Python 3 3 更新为zypper update python3保留在 Python
  • Loaddata 未正确处理时间戳和时区

    我正在使用 django 1 4 1 并启用了 mysql 和时区 我将数据转储到 yaml 修改了一些字段以创建一些测试数据 并尝试将其重新加载 但是 即使指定了 tz Django 仍不断抱怨天真的日期时间 具体来说 我的负载数据有 f
  • 按频率对 SQL 查询记录进行排序

    有什么方法可以根据某个值在列中出现的频率来对从 SQL 查询中选择的记录进行排序吗 例如 如果有 5 个列 value1 的记录 3 个列 value2 的记录 以及 2 个列 value3 的记录 有没有办法让结果先显示 value1 然
  • mysql 仅替换某些字段

    我有一个 mysql 表 CREATE TABLE gfs localidad varchar 20 fecha datetime pp float 8 4 NOT NULL default 0 0000 temp float 8 4 NO
  • 获取特定区域的节点列表?

    我正在开发一款横向游戏 我需要知道某个区域中有哪些节点来实现 视线 之类的功能 现在我正在尝试使用 enumerateBodyiesInRect 但它检测到的主体距离评估的矩形 20px 或更多 我无法弄清楚为什么它如此不精确 这就是我现在
  • 如何在 php 中获取远程域的 HTTP 状态代码?

    我想创建一个批处理脚本 遍历数据库中的 20 000 个链接 并清除所有 404 等 如何获取远程 URL 的 HTTP 状态代码 最好不要使用curl 因为我没有安装它 CURL 会是完美的 但由于你没有它 你将不得不开始使用套接字 该技
  • R 中复杂的非等值合并

    我正在尝试在两个表之间进行复杂的非等值连接 我受到了上次 userR 2016 中的演示的启发 https channel9 msdn com events useR international R User conference useR