Datetime - 确定 R 中多个(n)日期时间范围是否相互重叠

2023-12-03

嗨,朋友们,我在查找多个日期时间范围是否相互重叠以及如果是的话,则查找它们重叠的时间段时遇到问题。我参考了以下链接确定两个日期范围是否重叠 and 检测重叠周期的算法还有更多。

不知道这是否正确,我有 n=3 的示例解释。

假设我有“n”个开关 sw1、sw2 和 sw3。状态是开/关状态,即 1/0。

Switches,State,Intime,Outtime

sw3,1,9:00:00,10:40:00
sw2,1,9:30:00,10:15:00
sw1,1,10:00:00,11:00:00
sw2,1,10:20:00,10:30:00

我遇到过这种可能性。可能还有更多。仍在寻找其他可能性。这里常见的时间段是从 10:00 到 10:15 即 15 分钟,10:20 到 10:30 即 10 分钟。总时间这些开关打开(“1”)的时间为 25 分钟。

                 10:00                           11:00
              sw1 |-----------------------------------|
       9:30       10:15   10:20     10:30
     sw2 |-------------|      |-------|
 9:00                                     10:40 
sw3 |----------------------------------------| 

将这个日期时间概括为 n 个重叠开关是一项艰巨的任务。我仍在努力,因此欢迎任何建议或修改。谢谢。


1)根据样本数据,我们假设数据的格式为 hh:mm:00,其中 hh

读入测试数据。创建两个函数,将 hh:mm:00 形式的字符串转换为分钟数,以及一个将分钟数转换为时间的函数"times"目的。为每行数据创建分钟序列,给出Intervals列表。联合那些对应于给出列表的相同开关的序列Intervals.u然后将该列表的组件相交以给出序列Intersection。计算运行次数,r, in Intersection给出一组起点和终点。最后计算分钟数并将其转换为"times"班级持续时间。 (分钟数和持续时间仅取决于r and Intersection所以我们可以跳过以##结尾的行 ifintervals.df不需要。)

# test data
Lines <- "Switches,State,Intime,Outtime
sw3,1,9:00:00,10:40:00
sw2,1,9:30:00,10:15:00
sw1,1,10:00:00,11:00:00
sw2,1,10:20:00,10:30:00"
DF <- read.csv(text = Lines, as.is = TRUE)

library(chron)

to.num <- function(x) floor(as.numeric(times(x)) * 24 * 60 + 1e-6)
to.times <- function(x) times(x / (24 * 60))

Seq <- function(r) seq(to.num(DF$Intime[r]), to.num(DF$Outtime[r]))    
Intervals <- lapply(1:nrow(DF), Seq)
Intervals.u <- lapply(split(Intervals, DF$Switches), 
     function(L) Reduce(union, L))
Intersection <- Reduce(intersect, Intervals.u)

r <- rle(c(FALSE, diff(Intersection) == 1))

i.ends <- cumsum(r$lengths)[r$values] ##
ends <- to.times(Intersection[i.ends]) ##
starts <- ends - to.times(r$lengths[r$values]) ##
intervals.df <- data.frame(start = starts, end = ends); intervals.df ##
##         start      end
##    1 10:00:00 10:15:00
##    2 10:20:00 10:30:00

mins <- length(Intersection) - sum(r$values); mins
## [1] 25
duration <- to.times(mins); duration
## [1] 00:25:00

2)关于与速度有关的注释,我们可以使用 IRanges 包,它可以有效地对范围进行编码,并且还可以稍微减少代码大小:

library(IRanges)
Intervals <- IRanges(to.num(DF$Intime), to.num(DF$Outtime))
Intersection <- Reduce(intersect, split(Intervals, DF$Switches))

intervals.df <- data.frame(start = to.times(start(Intersection)), 
                           end = to.times(end(Intersection)))
intervals.df
##      start      end
## 1 10:00:00 10:15:00
## 2 10:20:00 10:30:00

mins <- sum(width(Intersection) - 1); mins
## [1] 25
duration <- to.times(mins); duration
## [1] 00:25:00

Updates一些修复和更好的变量名称。进一步改进。添加了(2)。

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

Datetime - 确定 R 中多个(n)日期时间范围是否相互重叠 的相关文章

  • 矩阵乘法 - 视图/投影、世界/投影等

    在 HLSL 中有很多矩阵乘法 虽然我了解如何以及在何处使用它们 但我不确定它们是如何导出的或它们的实际目标是什么 所以我想知道是否有在线资源可以解释这一点 我特别好奇将世界矩阵乘以视图矩阵以及世界 视图矩阵乘以投影矩阵背后的目的是什么 您
  • 在ggplot中设置y轴中断

    我在代码中设置中断时遇到困难 我尝试添加breaks seq 0 100 by 20 但似乎无法让它正常工作 本质上我希望 Y 轴从 0 到 100 每 20 个刻度一次 YearlyCI lt read table header T te
  • 为什么这个 R ggplot2 代码会显示一个空白的显示设备?

    虽然 SO 通常不用于帮助解决错误 但这个显示了特别简单且特别烦人的行为 如果你是一个ggplot2用户 您可以在 10 秒或更短的时间内重现它 正如这个 GitHub 问题 ggplot gtable 创建空白显示 https githu
  • 高效列出目录中的所有子目录

    请参阅迄今为止所采取的建议的编辑 我正在尝试使用 WinAPI 和 C 列出给定目录中的所有目录 文件夹 现在我的算法又慢又低效 使用 FindFirstFileEx 打开我正在搜索的文件夹 然后我查看目录中的每个文件 使用 FindNex
  • 数量重新分配逻辑 - 具有外部数据集的 MapGroups

    我正在研究一种复杂的逻辑 需要将数量从一个数据集重新分配到另一个数据集 在例子中我们有Owner and Invoice 我们需要从数量中减去Invoice准确地Owner匹配 在给定汽车的给定邮政编码处 减去的数量需要重新分配回同一辆车出
  • 如何为自定义 S3 类实现提取/取子集 ([ [<-, [[ [[<-)] 函数?

    我有一个自定义的 S3 类foo 它在正常的基础上添加了一些自定义行为data frame foo object lt data frame class foo object lt c foo data frame 对于这个类 还应该有一个
  • case_when 与部分字符串匹配和 contains()

    我正在使用一个数据集 其中有许多名为 status1 status2 等的列 在这些列中 它表示某人是否豁免 完整 注册等 不幸的是 豁免投入并不一致 这是一个示例 library dplyr problem lt tibble perso
  • 平滑连续 2D 点

    UPDATE 感谢 user20650和 李哲源Zheyuan Li 这是我想出的解决方案 Example data set df 3600 observations points Create a vector of the cumula
  • 如何在 R 中的 dygraph 标题中使用 UTF-8 字符

    使用 Rstudio Windows8 当我使用 dygraph 函数绘制时间序列时 在尝试在主标题中使用 UTF 8 字符时遇到问题 library dygraphs dygraph AirPassengers main T tulo 这
  • 将维基百科中的表格加载到 R 中

    我正在尝试从以下 URL 将最高法院法官表加载到 R 中 https en wikipedia org wiki List of Justices of the Supreme Court of the United States http
  • 从 1 到 20 亿,像 (23,29) 这样相差 6 的连续素数对的数量

    如何在考虑时间复杂度的情况下从 1 到 20 亿 使用任何编程语言且不使用任何外部库 找到像 23 29 这样相差 6 的连续素数对的数量 尝试过埃拉托色尼筛 但获得连续素数是一个挑战 使用了生成器 但时间复杂度非常高 代码是 def ge
  • 将 z 分数转换为百分比的函数

    谷歌不想提供帮助 我能够计算 z 分数 并且我们正在尝试生成一个函数 给定 z 分数 可以得出正态分布中低于该 z 分数的人口百分比 我能找到的只是对百分比表的 z 分数的引用 有什么指点吗 Is it 这个 z 分数 链接 http en
  • 在闪亮的数据表中为每个单元格显示工具提示或弹出窗口?

    有没有什么方法可以为 r闪亮数据表中的每个单元格获取工具提示 有很多方法可以获取悬停行或列 但我找不到一种方法来获取行和列索引并为每个单元格显示不同的悬停工具提示 任何人都可以修改以下代码吗 library shiny library DT
  • ggplot2:带有 geom_line 的 x 轴因子不起作用

    我想要一个线图 其中value绘制为函数expt每级一行var 这是我的数据 lines lt expt var value 1 none p 0 183065327746799 2 none p 0 254234138384241 3 n
  • R 中的数据框操作 - 将单元格向左移动并删除 NA

    我有一个数据框 其列由随机分布的值和 NA 组成 如下所示 a lt c S E NA S NA b lt c A NA M G K c lt c I NA NA NA L meh lt dataframe a b c 1 2 3 4 5
  • 如何在jquery中获取保存时间和当前时间的差异?

    我想在 javascript 或 jquery 中获取保存时间和当前时间之间的时差 我节省的时间看起来像Sun Oct 24 15 55 56 GMT 05 30 2010 java中的日期格式代码如下 String newDate 201
  • 更改ggplot2中的字体

    曾几何时 我改变了我的ggplot2字体使用windowsFonts Times windowsFont TT Times New Roman 现在 我无法摆脱这一切 在尝试设置family in ggplot2 theme 当我用不同的字
  • 斯皮尔曼相关性和联系

    我正在一小组配对排名上计算斯皮尔曼的 rho 斯皮尔曼因处理领带不当而闻名 例如 取2组8个排名 即使两组中有6个是平局 相关性仍然很高 gt cor test c 1 2 3 4 5 6 7 8 c 0 0 0 0 0 0 7 8 met
  • 应用对数来导航树

    我曾经知道一种使用对数从树的一片叶子移动到树的下一个 有序 叶子的方法 我认为它涉及获取 当前 叶子的位置值 排名 并将其用作从根向下到新目标叶子的新遍历的种子 一直使用对数函数测试来确定是否沿着右或左节点向下到达叶子 我已经不记得如何运用
  • 闪亮井板宽度

    library shiny library shinydashboard ui lt dashboardPage dashboardHeader dashboardSidebar dashboardBody wellPanel tags d

随机推荐

  • Android File.listFiles 不显示目录内的所有文件

    我正在使用 Android Emulator 2 2 版本来开发一个小应用程序 我应该列出目录下的所有图像文件 jpg 文件 我通过 ADB puash 命令将文件复制到 data 示例 data 1 jpg 现在 我创建一个 File 对
  • php switch 语句 int = 0 时出错

    我在 php switch case 中遇到问题 当我设置 数字 0它应该首先运行case但这里代码返回10 20K这是第二种情况 我检查了比较运算符 在 if else 情况下测试了它们 它们返回正确的值 但这里第一种情况不运行 数字 0
  • 浮点运算:误差求和与乘法

    我试图理解这个简单示例背后的浮点运算 理论上 这两种代码在算术上是等价的 但显然一系列加法比简单的乘法增加了更多的错误 s 0 0 for i in range 10 s 0 1 print s print 30f s 0 99999999
  • 使用 VarArgs 隐式定义

    我刚刚注意到implicit def似乎在 var args 中不起作用 例如 我有一个java函数 它需要java lang Byte 作为其参数输入 该函数调用被一个 scala 方法包围 该方法采用scala Byte implici
  • 这种即发即忘的方法正确吗?

    我已经实施了Instagram API 实时更新 基本上 当根据我的订阅添加新图像时 它们会向我提供的 url 发出 POST 请求 他们说 您应该在 2 秒超时内确认 POST 如果您需要对收到的信息进行更多处理 您可以在异步任务中执行此
  • 将反应表行数据传递给反应模式

    作为 React 新手 我很难将数据从反应表传递到 编辑 模式 并且似乎无法找到类似问题的解决方案 数据通过 Axios API 调用从数据库中获取并呈现在反应表中 我需要将渲染行的数据传递到模式 以便随后发出放置请求并将数据更新到服务器
  • Groovy 子类调用访问闭包的超类方法

    我有一个很棒的超类 如下所示 class AGroovyClass private String str hello void printString int nTimes nTimes times println str 和子类 clas
  • mac os jdk 1.8 问题 vlc 控制 JAWT 无法加载

    JavaVM WARNING JAWT GetAWT must be called after loading a JVM Exception in thread AWT EventQueue 0 java lang Unsatisfied
  • 使用 MySQL C API - 使用准备好的语句检查插入行是否成功

    我开始学习如何使用 MySQL C API 并遇到了准备好的语句 我以前没有在其他语言中使用过这些 所以这对我来说都是新的 我在网上查了一下 我已经弄清楚如何使用准备好的语句从SELECT查询 现在我想做的是INSERT一些数据 看看是否成
  • 返回与值部分匹配的记录

    我正在尝试让查询工作 该查询从表单控件获取值 有时只是字符串的第一部分 我遇到的问题是 它仅在输入完整字符串时返回记录 即在姓氏框中 我应该能够输入 gr 它会显示 绿色的 灰色的 格雷厄姆 但目前除非使用完整的搜索字符串 否则它不会显示任
  • 在 Ruby 中发出超时的 HTTP HEAD 请求

    在 Rails 应用程序中 我想对资源 用户提供的 URL 发出 HTTP HEAD 请求 以确保它存在 我还想要一个超时 以确保该方法在花费合理的等待时间后失败 实现此目的最直接的方法是什么 如果可能 使用标准库 试试这个片段 requi
  • 使用 A* 的启发式方法来查找增益最高的路径

    假设我想改变 A 中的逻辑 试图找到最有用的路径 即增益最高的路径 而不是找到最短路径 即成本最低的路径 就我而言 目标并不固定为唯一的结束节点 节点定义为具有距离的任何节点B从起点开始 在普通版本 找到最短路径 中 我需要不要高估成本 即
  • PowerShell FTPS 上传失败并显示“系统错误”。

    问题 客户要求我们将从系统中提取的数据上传到他们的 box com 平台 而不是我们普通的 SFTP 实用程序 我有 box com 凭据 并且知道他们需要 FTPS 而不是 SFTP 并且需要被动模式 我抄袭了一个片段ThomasMaur
  • Groovy 中的测试类在 Kotlin 中看不到测试类

    我有一个带有 Kotlin 插件的 gradle 项目 在我的项目中 我使用 groovy 和 Spock 进行测试 用 Kotlin 编写的测试中使用的实用程序类之一 我将其放入 src test kotlin 我试图使用 groovy
  • 对 solr 输入字段进行哈希处理

    我想方便地搜索我们无法以非散列或加密形式索引或存储的字段 有没有办法告诉 solr 在与索引进行比较之前对特定字段进行哈希 或加密 简而言之 我认为这并不容易 这取决于您需要什么级别的安全性 作为一种通用 简单的解决方案 您可以将整个索引存
  • 在 ASP.NET MVC RC1 中对强类型视图使用“添加视图”对话框时出现问题

    我喜欢随 RC1 发布的新 添加视图 对话框 如果您指定视图数据类 它会为您生成一个支架视图 它似乎与我的解决方案中的项目中定义的类配合得很好 我的一些域类继承自外部程序集中定义的基类 并在我的 Web 项目中引用 当我指定这些域类之一时
  • 使用 MS 批处理文件将程序的输出分配给变量

    我需要使用 MS 批处理文件将程序的输出分配给变量 所以在 GNU Bash shell 中我会使用VAR application arg0 arg1 我需要在 Windows 中使用批处理文件实现类似的行为 就像是set VAR appl
  • 使页眉和页脚文件包含在多个 html 页面中

    我想创建包含在多个 html 页面上的通用页眉和页脚页面 我想使用 JavaScript 有没有办法只使用 html 和 JavaScript 来做到这一点 我想在另一个 html 页面中加载页眉和页脚页面 你可以通过以下方式完成此操作jq
  • 使用按钮打开包含库存商品详细信息的页面

    我的目的是在索引页面上显示带有链接的产品 单击链接时 将打开一个 模态 页面 显示该产品的详细信息 我有一个链接到产品页面的按钮 但没有链接到索引页面上的其他项目 如何使用此链接打开每个产品页面 按钮的代码
  • Datetime - 确定 R 中多个(n)日期时间范围是否相互重叠

    嗨 朋友们 我在查找多个日期时间范围是否相互重叠以及如果是的话 则查找它们重叠的时间段时遇到问题 我参考了以下链接确定两个日期范围是否重叠 and 检测重叠周期的算法还有更多 不知道这是否正确 我有 n 3 的示例解释 假设我有 n 个开关