data.table 中的条件(不等式)连接

2024-04-16

我只是想弄清楚如何对两个 data.tables 进行条件连接。

我写了一个sqldf条件连接给我提供其开始或结束时间在其他开始/结束时间之内的电路。

sqldf("select dt2.start, dt2.finish, dt2.counts, dt1.id, dt1.circuit 
      from dt2 
        left join dt1 on (
          (dt2.start  >= dt1.start and dt2.start  < dt1.finish) or 
          (dt2.finish >= dt1.start and dt2.finish < dt1.finish)
        )")

这给了我正确的结果,但对于我的大型数据集来说太慢了。

什么是data.table如何在没有矢量扫描的情况下做到这一点?

这是我的数据:

dt1 <- data.table(structure(list(circuit = structure(c(2L, 1L, 2L, 1L, 2L, 3L, 
1L, 1L, 2L), .Label = c("a", "b", "c"), class = "factor"), start = structure(c(1393621200, 
1393627920, 1393628400, 1393631520, 1393650300, 1393646400, 1393656000, 
1393668000, 1393666200), class = c("POSIXct", "POSIXt"), tzone = ""), 
    end = structure(c(1393626600, 1393631519, 1393639200, 1393632000, 
    1393660500, 1393673400, 1393667999, 1393671600, 1393677000
    ), class = c("POSIXct", "POSIXt"), tzone = ""), id = structure(1:9, .Label = c("1001", 
    "1002", "1003", "1004", "1005", "1006", "1007", "1008", "1009"
    ), class = "factor")), .Names = c("circuit", "start", "end", 
"id"), class = "data.frame", row.names = c(NA, -9L)))


dt2 <- data.table(structure(list(start = structure(c(1393621200, 1393624800, 1393626600, 
1393627919, 1393628399, 1393632000, 1393639200, 1393646399, 1393650299, 
1393655999, 1393660500, 1393666199, 1393671600, 1393673400), class = c("POSIXct", 
"POSIXt"), tzone = ""), end = structure(c(1393624799, 1393626600, 
1393627919, 1393628399, 1393632000, 1393639200, 1393646399, 1393650299, 
1393655999, 1393660500, 1393666199, 1393671600, 1393673400, 1393677000
), class = c("POSIXct", "POSIXt"), tzone = ""), seconds = c(3599L, 
1800L, 1319L, 480L, 3601L, 7200L, 7199L, 3900L, 5700L, 4501L, 
5699L, 5401L, 1800L, 3600L), counts = c(1L, 1L, 0L, 1L, 2L, 1L, 
0L, 1L, 2L, 3L, 2L, 3L, 2L, 1L)), .Names = c("start", "end", 
"seconds", "counts"), row.names = c(1L, 3L, 4L, 5L, 6L, 7L, 8L, 
9L, 10L, 11L, 12L, 13L, 14L, 15L), class = "data.frame"))

Using non-equi joins:

ans = dt1[dt2, on=.(start <= end, end > start), 
           .(i.start, i.end, counts, id, circuit, cndn = i.start < x.start & i.end >= x.end), 
           allow.cartesian=TRUE
        ][!cndn %in% TRUE]

条件start <= end, end >= start(注意>= on both情况)将检查两个间隔是否以任何方式重叠。一侧的开区间通过以下方式完成end > start part (>代替>=)。但它仍然会获取类型的间隔:

         dt1: start=================end
   dt2: start--------------------------------end ## start < start, end > end

and

         dt1: start=================end
                dt2: start----------end          ## end == end

The cndn专栏的目的是检查并删除这些情况。希望这些情况不会很多,这样我们就不会不必要地实现不需要的行。


PS:这种情况下的解决方案并不像我想要的那么简单,那是因为该解决方案需要一个OR手术。可以进行两个条件连接,然后将它们绑定在一起。

也许在某些时候,我们必须考虑以更直接的方式将连接扩展到此类操作的可行性。

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

data.table 中的条件(不等式)连接 的相关文章

  • Shiny可以识别用鼠标选择的文本(突出显示的文本)吗?

    我需要用户将文本片段分配给 Shiny 中的类别或 代码 基本上 我希望用户突出显示输出中的文本 在下面的示例中 来自table or text输出 然后按一个按钮 code 并将选定的文本分配给应用程序内的对象 在下面的应用程序中 所选文
  • 有没有一种简单的方法可以根据多个标准进行排名,从而保留 R 中的联系?

    当单个标准排序良好时 rank 函数会返回明显的结果 rank c 2 4 1 3 5 1 2 4 1 3 5 当单个标准具有联系时 排名函数 默认情况下 将平均排名分配给联系 rank c 2 4 1 1 5 1 3 0 4 0 1 5
  • 使用starts_with() 将 NA 替换为 0

    我正在尝试替换我的一组特定列的 NA 值tibble 这些列都以相同的前缀开头 所以我想知道是否有一种简洁的方法来使用starts with 函数从dplyr包可以让我做到这一点 我已经看到了有关 SO 的其他几个问题 但是它们都需要使用特
  • 具有动态变量数的公式

    假设有一些 data framefoo data frame想要找到目标列的回归Y由其他一些专栏 为此目的 通常使用一些公式和模型 例如 linear model lt lm Y FACTOR NAME 1 FACTOR NAME 2 fo
  • R:编写抛硬币的随机采样程序

    假设我们有以下情况 有一枚硬币 如果它正面朝上 那么下一次抛掷正面的概率是 0 6 如果是反面 那么下一次抛掷反面的概率也是 0 6 一个班有100名学生 每个学生随机抛掷硬币几次 Student n 的最后一次抛硬币不会影响 Studen
  • 从向量中删除元素在 R 中出现的时间量

    我想从一个向量中删除元素在另一个向量中出现的时间 就像我要减去它们一样 鉴于我想要删除的元素向量中的每个元素也存在于我想要从中删除的主向量中 a lt c A B B C C C b lt c A B C C a a in b return
  • 如何编辑数据表中的行

    我已经创建了一个数据表 它有 3 列产品编号 产品名称 and 产品 价格 Datatable table new DataTable Product table Columns Add Product id typeof int tabl
  • jupyter 中的 r 图形 - 无法启动 png() 设备

    我在 Jupyter 中使用 R 但无法在笔记本本身中绘制图表 这是一个可重现的示例 set seed 123 mat as matrix x rnorm 100 y rnorm 100 plot mat 在朱皮特中 Error in pn
  • R:根据元素长度从向量中删除元素

    如何根据字符串的字符数或长度从字符串向量中删除元素 df lt c asdf fweafewwf af aewfawefwef awefWEfawefawef gt df 1 asdf fweafewwf af aewfawefwef aw
  • 回归时如何设置系数值;右

    我正在寻找一种指定预测变量值的方法 当我使用当前数据运行 glm 时 其中一个变量的系数接近 1 我想将其设置为 0 8 我知道这会给我一个较低的 R 2 值 但我先验地知道模型的预测能力会更大 glm 的权重组件看起来很有希望 但我还没有
  • 在 Shiny 中叠加两个 ggplot

    我有一个非常大的数据集 我正在使用 ggplot 在 Shiny 上绘制它 我有一个与 x 轴上的值相关联的滑块 我想用它对选定的数据子集重新着色 并让其余数据保持原样 最简单的选择是重新创建整个绘图 但由于它是一个大型数据集 因此这是一个
  • 如何有效地将多个光栅 (.tif) 文件导入 R

    我是 R 新手 尤其是在空间数据方面 我正在尝试找到一种方法来有效地将多个 600 单波段栅格 tif 文件导入到 R 中 所有文件都存储在同一文件夹中 不确定这是否重要 但请注意 在我的 Mac 和 Windows 并行 VM 上的文件夹
  • 将所有分号替换为空格 pt2

    我尝试对 2000 多行关键字的列表运行文本分析 但它们的列出方式如下 战略 管理风格 组织 所以当我使用 tm 删除标点符号时 它就变成了 组织的战略管理风格 我认为这在某种程度上破坏了我常用术语的分析 我尝试过使用 vector lt
  • 在 R 中导入 csv 文件时如何保留前导零?

    当我写一个 csv来自 R 的文件 其中我的组名称以前导零值开头 前导零被保留 但是当我导入 csv前导零被删除 组名称被转换为整数 当我导入一个组时 如何保留组名称中的前导零 csvR 中的文件 Example df lt data fr
  • 如何使用autoconf重新生成配置文件?

    我使用 autoconf 重新生成配置文件 它有效 但是当我执行生成的配置文件时 configure 有一些错误消息 例如 configure line 3713 syntax error near unexpected token bla
  • 如何读取 R 中的每个 .csv 文件并将其导出到单个大文件中

    你好 我有以下格式的数据 101 20130826T155649 3 1 round 0 10552 180 yellow 12002 1 round 1 19502 150 yellow 22452 1 round 2 28957 130
  • 根据 row_number() 过滤 data.frame

    更新 自从提出这个问题以来 dplyr 已经更新 现在按照 OP 的要求执行 我正在尝试获取第二行到第七行data frame using dplyr 我正在这样做 require dplyr df lt data frame id 1 1
  • 空间数据xyz到矩阵

    我有一个大数据框 100 000 行 其中包含 LON LAT VALUE 我想将其转换为矩阵 EPSG 中的坐标 3035 我使用以下命令尝试了 reshape2 包 acast df lon lat value var value 效果
  • dplyr 中的标准评估:全局环境中的函数出现“无法找到函数”错误

    我试图在 dplyr 中对全局环境中的函数使用标准评估 但出现 无法找到函数 错误 这是一些代码 create data frame df lt data frame x rnorm 10 y rnorm 10 define arbitra
  • R 中使用 `UseMethod()` 与 `inherits()` 来确定对象的类

    如果我需要根据 R 对象的类以不同的方式处理它们 我可以使用if and else在单个函数内 foo lt function x if inherits x list Foo the list else if inherits x num

随机推荐

  • 张量流学习中的多元回归输出节点

    我对张量流比较陌生 想使用 tf contrib learn 中的 DNNRegressor 来执行回归任务 但我不想有一个输出节点 而是想要多个 例如十个 如何配置回归器来调整许多输出节点以满足我的需求 我的问题与以下已在 SO 上提出的
  • 如何查看亚马逊 lambda 函数的 console.log 输出

    当你做一个 console log Loading function 在亚马逊 lambda 函数中 它去哪里了 我的设置 API网关 lambda函数nodejs6 10 卷曲https n2tredacted execute api u
  • android跨度点击事件

    好的 这些都是我的问题 我需要使用正则表达式来过滤掉除字母之外的所有内容 然后我需要将找到的单词包含在 word 标签中 有了这个 str str replaceAll pattern 0 现在我正在过滤所有正确的元素 标点符号 数字等 但
  • 催化剂控制器问题

    我刚刚在我的第一个大型项目中使用了催化剂 我想知道我是否按照预期的方式使用了催化剂 我有 Root pm 在该文件中我放置了多个 url 处理程序 每个 url 有一个控制器是最佳实践还是应该考虑分组 Catalyst 的优点之一是它的灵活
  • Rails,将文件上传到服务器时获取文件名

    我在 Rails 3 中使用 AJAX 上传器以及 paper clip 并在此处上传文件 def upload photo Photo create photo gt params file title gt params filenam
  • 有哪些 CSS 属性可以让元素脱离正常流程?

    有哪些 CSS 属性可以让元素脱离正常流程 这些属性可以是 float position absolute 等 这个问题涉及正常流程的所有可能的改变 只有以下属性会影响任何给定元素的正常流程 float right left positio
  • 在共享主机上安装 PHP 扩展

    我需要启用mcrypt https www php net manual en book mcrypt php我的网站上的功能 除了我在共享主机上 运行 Linux 并且显然无权访问php ini文件 似乎确实有安装 PEAR 模块的选项
  • 在 R 中从 MySQL 获取 UTF-8 文本返回“???”

    我一直在尝试从 R 获取 MySQL 数据库中的 UTF 8 文本 我在 OS X 上运行 R 通过 GUI 和命令行都尝试过 其中默认区域设置是 en US UTF 8 并且没有无论我尝试什么 查询结果都显示 对于所有非 ASCII 字符
  • Plotly 中子图的标题

    我正在尝试在 Plotly 中制作 3x3 子图的网格 我正在尝试为每个子图获取标题并在顶部获取主标题 但我似乎无法让它发挥作用 我看到这个很棒的网站 http takwatanabe me data science plotly layo
  • Python multiprocessing.Pool在MacOS和Linux系统上的不同性能

    我是 Python 初学者 我在项目中使用了 multiprocessing Pool 来提高性能 这是我使用 multiprocessing Pool 的代码片段 我在驻留服务器的开头构建池 并在每次服务器收到请求时使用 Pool app
  • 不定长度的数组[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如何在未知长度的排序数组中找到随机元
  • MFC:如何在一个函数中捕获对话框每个控件的设置焦点

    我有 n 个对话框 它们具有相同的基本对话框 每个对话框都有自己的控件 编辑框 组合框 列表控件 etc 在基本对话框中 如何设置每个控件的焦点消息 例如 给出一个消息框 text Hello I got focus my ID is d
  • XAMPP:无法启动 Apache (Windows 10)

    我正在使用 XAMPP 并且可以启动 Apache 但是 MySQL php我的管理员 https en wikipedia org wiki PhpMyAdmin start 当我开始时 我收到此错误 10 07 49 Apache Er
  • 无法更改视图中绘制的圆圈的颜色

    我正在尝试更新我在子类中创建的圆圈的颜色UIView通过在类中创建一个方法来更新颜色 如下所示 但颜色不会改变 import UIKit class badge UIView struct mine static var p UIBezie
  • Linux 文件权限的正则表达式(数字表示法)

    我一生都无法找出正确的正则表达式 我正在寻找的是一个正则表达式来匹配 Linux 文件权限的有效数字表示 例如 740 表示全部读取无 777 表示全部全部 到目前为止 我已经尝试过以下操作 strtotest 740 echo strto
  • 如何从视图范围的 JSF bean 获取请求参数?

    我有查看范围bean 应该在 init PostConstruct 上访问请求 URL 中的值并在其生命周期内存储它们 我了解到 为了获得价值http请求 我需要以下代码 ManagedProperty param x private in
  • iOS 相当于 Android 片段/布局

    在 Android 中 您可以使用 Fragments 只开发一款针对手机和平板电脑的应用程序 这样您就可以拥有不同的 UI 您甚至可以仅使用布局并对代码设置一些条件来运行平板电脑或手机逻辑 我需要为 iPhone 和 iPad 开发一个应
  • 仅根据lucene中term出现次数较多的文档来计算分数

    我开始研究基于 lucene net 引擎的简历检索 文档 组件 它工作得很好 它会获取文档并根据 VSM 背后的理念是 查询词出现在 a 中的次数 文档相对于数量 该术语出现在所有 集合中的文档越多 该文件的相关内容是 询问 Lucene
  • 在 sphinx 侧边栏中启用版本阅读文档主题

    我想将 versions html 包含在侧边栏中 但无法成功 我尝试在 中为侧边栏添加 versions html 但这没有效果 html sidebars versions html 另外如何声明不同的版本conf py 我看过sphi
  • data.table 中的条件(不等式)连接

    我只是想弄清楚如何对两个 data tables 进行条件连接 我写了一个sqldf条件连接给我提供其开始或结束时间在其他开始 结束时间之内的电路 sqldf select dt2 start dt2 finish dt2 counts d