【发布时间】:2021-10-19 18:02:41
【问题描述】:
我希望可以为 R 中的时间段创建唯一索引或 ID。
我有一个二级时间数据的大型数据集。理论上,有时间中断可以让我将时间块“分组”并为它们分配一个唯一的索引或编号。
我将尝试创建一个可重现的示例,但请记住,时间的持续时间以块为单位发生变化,时间间隔不均匀,日期可能会从一天变为另一天。
#this is what the dataframe would look like
DateTime
2021-07-12 20:28:26 CDT
2021-07-12 20:28:27 CDT
2021-07-12 20:28:28 CDT
2021-07-12 20:28:29 CDT
2021-07-12 20:28:30 CDT
2021-07-12 23:14:28 CDT
2021-07-12 23:14:29 CDT
2021-07-12 23:14:30 CDT
2021-07-12 23:14:31 CDT
2021-07-12 23:14:32 CDT
2021-07-12 23:14:33 CDT
2021-07-12 23:14:34 CDT
2021-07-12 23:14:35 CDT
2021-07-12 23:14:36 CDT
2021-07-27 17:16:05 CDT
2021-07-27 17:16:06 CDT
2021-07-27 17:16:07 CDT
2021-07-27 17:16:08 CDT
2021-07-27 17:16:09 CDT
2021-07-27 17:16:10 CDT
2021-07-27 17:16:11 CDT
2021-07-27 17:16:12 CDT
2021-07-27 17:16:13 CDT
2021-07-27 17:16:14 CDT
2021-07-27 17:16:15 CDT
#this is for reproducing time times
structure(c(1626139706, 1626139707, 1626139708, 1626139709, 1626139710, 1626149668, 1626149669, 1626149670, 1626149671, 1626149672, 1626149673, 1626149674, 1626149675, 1626149676, 1627424165, 1627424166, 1627424167, 1627424168, 1627424169, 1627424170, 1627424171, 1627424172, 1627424173, 1627424174, 1627424175),
class = c("POSIXct", "POSIXt"), tzone = "")
再次,我希望为时间段/块分配一个唯一编号。如下所示:
DateTime Index
2021-07-12 20:28:26 CDT 1
2021-07-12 20:28:27 CDT 1
2021-07-12 20:28:28 CDT 1
2021-07-12 20:28:29 CDT 1
2021-07-12 20:28:30 CDT 1
2021-07-12 23:14:28 CDT 2
2021-07-12 23:14:29 CDT 2
2021-07-12 23:14:30 CDT 2
2021-07-12 23:14:31 CDT 2
2021-07-12 23:14:32 CDT 2
2021-07-12 23:14:33 CDT 2
2021-07-12 23:14:34 CDT 2
2021-07-12 23:14:35 CDT 2
2021-07-12 23:14:36 CDT 2
2021-07-27 17:16:05 CDT 3
2021-07-27 17:16:06 CDT 3
2021-07-27 17:16:07 CDT 3
2021-07-27 17:16:08 CDT 3
2021-07-27 17:16:09 CDT 3
2021-07-27 17:16:10 CDT 3
2021-07-27 17:16:11 CDT 3
2021-07-27 17:16:12 CDT 3
2021-07-27 17:16:13 CDT 3
2021-07-27 17:16:14 CDT 3
2021-07-27 17:16:15 CDT 3
#edit: something like this is possibility but isn't included in the reproducible example.
DateTime Index
2021-07-15 23:59:59 CDT 4
2021-07-16 00:00:00 CDT 4
这是我找到的最接近我正在寻找的东西:How do I create a unique ID for each night-time period across consecutive dates?
但我不确定如何继续。任何帮助将不胜感激谢谢。
【问题讨论】:
-
这种情况是不是你可以想象一个规则,比如“自上次以来每次间隔> 1分钟的新组”或“每次间隔是平均间隔的 10 倍时新组”最后 5 个条目”?
-
你需要
library(lubridate); tibble(DateTime) %>% mutate(Index =floor_date(DateTime, unit = 'hour'), Index = match(Index, unique(Index))) -
@Jon Spring - 是的,类似于您的第一个建议。像“每次间隔 > 1 分钟的新组”这样的规则会起作用。我相信在我的整个数据集中,时间间隔应该相差很远,比如一个小时,但可能会有一些异常。