【发布时间】:2020-08-11 20:03:23
【问题描述】:
我有一个包含 2 列的数据表。一个用于时间戳,一个用于条件。我试图找出某种情况发生的持续时间。我能够得到持续时间。但如果我的病情在两天内,那么我将得到超过 24 小时的时间。
我需要将其拆分为相应的日期。我正在使用rleid 进行分组,然后我找到了持续时间(max(timestamp) - min(timestamp) 在每个满足条件的组中。然后我终于aggregate 它每天都适合sum)。
timestamp condition
2020-01-01 10:10:13 0
2020-01-01 10:11:23 1
2020-01-01 10:14:45 1
2020-01-01 11:23:02 1
2020-01-01 11:33:14 1
2020-01-01 16:10:13 0
2020-01-01 18:34:12 1
2020-01-01 20:10:33 1
2020-01-01 23:04:56 1
2020-01-02 10:14:45 1
2020-01-02 11:23:02 1
2020-01-02 11:33:14 0
2020-01-02 16:10:13 0
在条件为1 时查找持续时间。
预期输出:
Date Duration
2020-01-01 05:52:35
2020-01-02 11:23:02
当我进行分组和查找持续时间时我得到了什么:
Date Duration
2020-01-01 18:10:41
问题在于分组,因为rleid 正在分组而不考虑日期。实际上如果这种情况连续两天发生,那么它应该限制在第一天的23:59:59,然后从第二天的00:00:00开始。这应该持续任意天数。
我的代码:
fdata = data[, group_id := rleid(condition == 1)][]
out = fdata[(condition == 1),][,.(start = as.Date(min(timestamp)),
duration = as.numeric(max(timestamp) - min(timestamp),units='mins')),by = .((group_id)][,group_id := NULL]
【问题讨论】:
-
不抱歉...实际上我是在进行 eval 解析...我复制了此处粘贴的条件...现在我已经更正了
-
我认为两者都将在同一日期'2020-01-02'
-
如果超过 23:59:59,我想拆分事件。剩余的应该在第二天而不是开始日
-
这是转换为 hh:mm:ss 后的最终输出...我最初会以分数形式获得持续时间
-
我猜你正在寻找
as.ITime("10:14:45") + as.ITime("01:08:17")# [1] "11:23:02"其中01:08:17是“10:14:45”和“11:23:02”之间的区别
标签: r data.table aggregate grouping