将重叠的日期时间间隔拆分为标识符值内的非重叠间隔

2024-04-24

我对这个问题有一个确切的问题在标识符的值内将重叠间隔拆分为非重叠间隔 https://stackoverflow.com/questions/55836442/split-overlapping-intervals-into-non-overlapping-intervals-within-values-of-an使用 R data.table,但有一个额外的问题,我的间隔是日期时间而不是整数。我的标识符是 id 列。在原始数据中,我有重叠的时间段,我想将它们分成每个 id 的所有非重叠时间段。

Have:

dt <- data.table(id = c(1, 1, 1),
                 start = c("1970-01-10 06:01:16", "1970-01-10 12:01:16", "1970-01-10 09:34:49"),
                 end = c("1970-01-10 12:01:16", "1970-01-10 17:01:16", "1970-01-11 07:49:48"),
                 value = c(1, 0, 3))

id  start                end                    value
1   1970-01-10 06:01:16  1970-01-10 12:01:16    1
1   1970-01-10 12:01:16  1970-01-10 17:01:16    0
1   1970-01-10 09:34:49  1970-01-11 07:49:48    3

Want:

id  start                end                    value
1   1970-01-10 06:01:16  1970-01-10 09:34:49    1
1   1970-01-10 09:34:49  1970-01-10 12:01:16    1
1   1970-01-10 12:01:16  1970-01-10 17:01:16    0
1   1970-01-10 09:34:49  1970-01-10 12:01:16    3
1   1970-01-10 12:01:16  1970-01-10 17:01:16    3
1   1970-01-10 17:01:16  1970-01-11 07:49:48    3

感谢任何帮助!


更新的答案

这是一个data.table版本答案避免使用for loop.

dt <- data.table(id = c(1, 1, 1),
                 start = as.POSIXct(c("1970-01-10 06:01:16", "1970-01-10 12:01:16", "1970-01-10 09:34:49")),
                 end = as.POSIXct(c("1970-01-10 12:01:16", "1970-01-10 17:01:16", "1970-01-11 07:49:48")),
                 value = c(1, 0, 3))

time_seq <- dt[,.(start=unique(sort(c(start,end))))]

dt[, `:=`(
  start_pos = sapply(start, function(x) which(x == time_seq$start)),
  end_pos = sapply(end, function(x) which(x == time_seq$start))
)][,num := end_pos - start_pos]

# same size with expected result
dt_desired <- dt[rep(seq(.N), num)][,order:=rowid(num)]


dt_final <- dt_desired[order == 1,
                       .(id,
                         start = time_seq[start_pos:(end_pos - 1), start],
                         end = time_seq[(start_pos + 1):end_pos, start],
                         value),
                       by = num]

原答案

这是我非常直观的解决方案。关键是创建独特的有序时间序列time_seq,这是所有的连接start and end。然后循环所有行生成start and end from time_seq.

library(data.table)
dt <- data.table(id = c(1, 1, 1),
                 start = as.POSIXct(c("1970-01-10 06:01:16", "1970-01-10 12:01:16", "1970-01-10 09:34:49")),
                 end = as.POSIXct(c("1970-01-10 12:01:16", "1970-01-10 17:01:16", "1970-01-11 07:49:48")),
                 value = c(1, 0, 3))

# initialization
dt_tmp <- data.table()
tem <- data.table()

# unique full time series with order
time_seq <- data.table(start = unique(sort(c(dt$start,dt$end)) ))

for (i in 1:nrow(dt)){
  # select date between start and end of the i-th row 
  tem <- time_seq[dt[i,start] <= start & start <= dt[i,end]]
  len <- length(tem$start)
  if(len > 2)
    tmp <- data.table(id = dt[i,id],
                    start = tem[1:len-1,start],
                    end = tem[2:len,start],
                    value = dt[i,value])
  else
    tmp <- dt[i,]
  dt_tmp <- rbind(dt_tmp,tmp)
}
dt_tmp
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将重叠的日期时间间隔拆分为标识符值内的非重叠间隔 的相关文章

  • 如何识别 R 中行的镜像重复项

    在下面的SO帖子中如何识别 R 中行的部分重复项 https stackoverflow com questions 54661129 how to identify partial duplicates of rows in r 5466
  • 如何为每个分组元素选择随机的非连续日期?

    我目前正在尝试为每个分组列选择非连续日期 换句话说 我有以下数据框 我基本上想group by Site 然后为每个分组站点仅保留 3 个随机非连续日期 例如 如果 HP37P1B 的日期对应于 3 月 12 日 3 月 13 日 3 月
  • R chron times() 函数不起作用

    我正在尝试将时间转换为自午夜以来的秒数 我很难从 chron 包中获取 times 函数来工作 我的使用方法如下 gt library chron gt 24 24 60 times 50 Error in 24 24 60 times 5
  • 将第一行粘贴到列表中的列名称

    我有 68 个数据文件 全部具有相同的标识符 但具有不同的指示符 我将这些单独的文件转换为一个列表 其中每个数据框作为一个单独的元素 每个数据框的第一行是年份 我想将其粘贴到列名称中 我希望能够用 分隔它 例如 现在列名称为 Arbeits
  • 每次向量元素变化时在 R 中分割向量

    每次元素值发生变化时 我都需要分割重复元素组的向量 例如 test vector lt c string1 string1 string1 string2 string2 string1 string1 string3 必须成为 1 1 s
  • data.table 逐行求和、平均值、最小值、最大值,如 dplyr?

    还有其他关于数据表上的行式运算符的帖子 他们要么是太简单 https stackoverflow com questions 7885147 efficient row wise operations on a data table或解决一
  • 当其长度不是所需总长度的倍数时重复向量

    我有一个 1666 行的数据框 我想添加一列 其中包含重复序列1 5与使用cut 进行交叉验证 它看起来像这样 Y x1 x2 Id1 1 15 3 6 1 0 1 1 2 2 2 0 05 3 3 3 0 45 2 8 4 1 85 3
  • R中的Score Sentiment函数,始终返回0

    我对分数有一个 可能 愚蠢的问题 情绪 我尝试将此函数与 3 个默认短语一起使用 问题是该函数返回分数 0 0 0 但它应该返回 2 5 4 我不明白这个问题 因为 RGui 不会给我错误 而且我正在遵循教程 我已经下载了否定词和肯定词的列
  • R 对等证书无法使用给定的 CA 证书进行身份验证,Windows

    当尝试使用导入谷歌工作表时gs read 函数 我收到以下错误消息 在curl curl fetch memory url handle handle 中出错 对等 无法使用给定的 CA 证书对证书进行身份验证 我正在关注这个vignett
  • SQL 获取当月前 3 个月的第一天

    我正在尝试选择当前日期前 3 个月的第一天 例如 如果当前日期是 2015 11 08 我的结果是 2015 08 01 我希望采用 yyyy mm dd 格式 我一开始就尝试过这个 但没有运气 SELECT DATEADD dd DAY
  • 按因素分层抽样

    我有一个 1000 行的数据集 其结构如下 device geslacht leeftijd type1 type2 1 mob 0 53 C 3 2 tab 1 64 G 7 3 pc 1 50 G 7 4 tab 0 75 C 3 5
  • 对整数进行反直觉测试:63 = (45 x 1.4) = 62

    我写了一个 可能不是特别好 函数来测试一个数字是否是整数 is wholeNumber lt function x x floor x 一般来说 这个函数对我的目的来说效果很好 因为我实际上只考虑用少数小数位测试数字的情况 所以我天真的理解
  • R ggplot2:stat_count() 不得与条形图中的 y 美学错误一起使用

    我在绘制条形图时遇到此错误 并且无法摆脱它 我已经尝试了 qplot 和 ggplot 但仍然出现相同的错误 以下是我的代码 library dplyr library ggplot2 Investigate data further to
  • 使用 SimpleDateFormat 分别获取日、月和年

    我有一个SimleDateFormat像这样 SimpleDateFormat format new SimpleDateFormat MMM dd yyyy hh mm String date format format Date par
  • 向图节点添加标签

    我使用 visnetwork 库制作了下图 library tidyverse library igraph set seed 123 n 15 data data frame tibble d paste 1 n relations da
  • R data.table %like% 带有逻辑 AND

    我正在尝试构建一个闪亮的搜索引擎应用程序 我根据搜索关键字返回 data table DT lt data table field c A B C A C D A D A B A D B C F B D K DT field like A
  • 使用 RSelenium 下载嵌入到框架中的文件

    我正在参与一个项目 其中有一个网页 我需要单击该网页才能获取 pdf 文件 该文件出现在同一页面内的新窗口中 我认为是 iframe 然后我需要单击一个按钮来下载文件 我正在使用的代码如下 library wdman library RSe
  • 如何提取 MySQL 日期中的月份和年份并进行比较?

    如何从 mySQL 日期中提取月份和日期并将其与另一个日期进行比较 我找到了 this MONTH 但它只获取月份 我寻找月份和年份 在Mysql Doku中 http dev mysql com doc refman 5 5 en dat
  • 如何在 R 中验证日期

    我有一个格式为的日期dd mm yyyy HH mm ss验证该日期的最佳和最简单的方法是什么 I tried d lt format Date date format d m Y H M S 但是当非法日期过去时如何捕获错误呢 简单的方法
  • 使用地理编码发出一个请求后超出查询限制

    我正在使用 ggmap 的地理编码来查找不同城市的纬度和经度 昨天它工作得很好 但今天只发出一个请求后我就收到了 OVER QUERY LIMIT 事实上 如果我只是加载库并运行地理编码 它会抛出 OVER QUERY LIMIT 错误 g

随机推荐

  • Windows Phone 8 检测屏幕解锁

    我的 WP8 应用程序设置为在锁定屏幕下运行 因为即使屏幕锁定时它也需要继续运行 但我希望能够检测用户何时解锁屏幕 我该怎么做 手机解锁时会调用哪些方法 如果有 框架的Unobscured当用户解锁时事件将触发 它也会触发Obscured当
  • 在页面加载之前运行 JavaScript 函数(设置适当大小的背景)

    我有一个图像背景 无论用户的分辨率是多少 我都希望其内容始终可见 因此 我希望能够在一开始就在页面加载之前确定分辨率并设置适当的背景图像文件 有可能吗 您可以运行可访问 DOM 的 Javascript 函数 无需等待页面加载 的最早点是放
  • 我可以像处理表一样处理存储过程的结果吗?

    在sql server 2005中可以做这样的事情吗 WITH tmpTable AS EXEC spWhatever 或者我可以通过其他方式查询从 sp 返回的数据 谢谢 临时表 CREATE TABLE foo col1 int col
  • 当夏令时开始/结束时,自纪元以来的毫秒数会发生什么?

    自纪元以来的毫秒数表示自 1970 年以来经过的毫秒数 在夏令时结束之前的那一刻 或者当我们将时钟从 2 00 设置回 1 00 时 自纪元以来的毫秒数也会回退 或者他们继续吗 另一个问题 如果我住在美国加利福尼亚州 采用太平洋 夏令 标准
  • 任何修改后需要 CLEAN PROJECT 的未知错误

    我们一直在开发一个应用程序 已经过去几个月了 我们遇到了一些奇怪的错误 例如 以某种方式启用Instant Run阻止我们编译和测试 最近 我们遇到了以下行为 每次我们想要Run我们的应用程序来测试它 如果自上次以来有任何修改 则会弹出错误
  • Tomcat日志格式禁用IPv6格式

    以下是三个日志示例 127 0 0 1 17 Sep 2010 14 03 07 0800 GET docs logging html HTTP 1 1 200 24040 http localhost 8000 docs manager
  • 重写标准库使用的内存分配方法? [复制]

    这个问题在这里已经有答案了 是否可以覆盖 STL 分配 管理和释放内存的方式 如果可能的话 人们会怎样做呢 有没有一种方法可以将处理原始内存的代码保留在一个类或文件中 我想对我的整个程序执行此操作 以便我可以跟踪内存使用情况 时间和生命周期
  • Spring JPA 存储库接口和默认方法用例

    我目前想知道是否可以通过使用 JPA 存储库内的默认接口方法来优雅地解决特定用例 假设我们有以下实体和支持类型 public enum Status STATUS 1 STATUS 2 STATUS 3 Entity Getter from
  • 使用 CMAKE (VISUAL STUDIO) 链接调试和发布库

    已经有一个Thread https stackoverflow com q 2209929 293195这并没有真正帮助 我希望能够链接例如Foo lib for Release配置和Foo d lib for Debug配置 我怎样才能实
  • CSS - 文本阴影大小

    I am trying to get this effect As you see shadow is bigger then text How can I set size of shadow against to text like s
  • React 导入导致无法解析模块说明符“react”

    你可以说我傻 我不会认为这是针对我个人的 但我已经 3 年多没有使用 REACT 了 我的脑细胞肯定已经死了 我收到错误 localhost 1 未捕获类型错误 无法解析模块说明符 react 相对引用必须以 或 开头 我确信这与我在 Ch
  • 用于属性设置器的 Visual Studio DebuggerStepThrough

    我不想禁用 Visual Studio 对所有异常的正常处理 我正在寻找一种方法来忽略特定属性的设置者引发的异常 我知道 DebuggerNonUserCode and DebuggerStepThrough 但它们似乎不适用于属性 或更具
  • Vagrant、共享文件夹:利用 inotify 而非 NFS

    我们的 Symfony2 Web 应用程序在开发模式下使用 Assetic 观察器来动态重新编译资产 Web 应用程序在 Docker 容器中运行 该容器在 Vagrant VM Ubuntu 12 04 Precise 中运行 主机是 O
  • 如何在 Xamarin Forms 的 Microchart 中添加 2 行

    我现在正在使用 Xamarin Forms 并尝试使用 Microchart 我想在一个折线图中显示 2 条线 以便我可以比较它们 但现在我不能在一张图表中同时放入2条线 有什么解决办法吗 非常感谢 你可以使用 hack 独立创建两个图表并
  • 将 C 转换为 MIPS - 嵌套数组

    我正在学习 MIPS 汇编语言 在书中看到了这个例子 对我来说这似乎是不正确的 如果是的话 这将不是我在本书中发现的第一个错误 变量f and g被分配寄存器 s0 and s1分别是数组的基地址A and B are s6 and s7分
  • python中图像的几何扭曲

    我想使用 python 对图像执行几何变换 以沿给定曲线 拉直 或校正图像 似乎 scikit imageProjectiveTransform and warp 对此非常有用 但文档很少 我按照文档进行操作here http scikit
  • 如何在PowerShell中从外部命令输出获取原始二进制数据?

    我在这里读到 当您在 powershell 中运行外部命令时 它们的输出始终被解释为字符串或字符串数 组 https stackoverflow com a 35980675 983442 https stackoverflow com a
  • 弹出窗口,如何在IE8中隐藏地址栏

    当我打开弹出窗口并设置 location 0 或 location no 时 网址栏仍显示在 IE8 中且为只读 怎么能隐藏呢 Thanks 这是不可能的 现代浏览器不允许这样做 这将是一个主要的安全缺陷 也可以看看这个答案 无耻地抄袭了大
  • 将计算出的日期与输入的日期进行比较

    我在单元格 p4 中有日期 2014 01 01 通过公式 O5 1000 60 60 24 DATE 1970 1 1 我在单元格 b5 中有日期 2014 01 01 输入 p4 b5 给出错误 p4 gt b5 给出错误 如何在 Ex
  • 将重叠的日期时间间隔拆分为标识符值内的非重叠间隔

    我对这个问题有一个确切的问题在标识符的值内将重叠间隔拆分为非重叠间隔 https stackoverflow com questions 55836442 split overlapping intervals into non overl