在R中,我正在查看显示模拟电力系统停机的数据,并且需要一种方法来标记连续停电。数据是每小时一次的,所以我正在寻找能够识别连续小时,然后在序列中中断的东西。我在标记持续到午夜的中断时遇到了麻烦。
我已经尝试了几种方法,但总是遇到长达数天的停机问题。例如,我可以标记从8小时到20小时的12小时停机,但如果停机从第一天的20小时到第二天的12小时(这些停机最终看起来像两个不同的、更短的停机),它就会拆分标签。
month day hour outage_tag
1 2 23 1
1 2 24 1
1 3 1 1
1 3 2 1
3 5 13 2
3 5 14 2
3 5 15 2
目标是创建上面所示的outage_tag列。我在创建午夜前后回绕的标签时遇到了问题(本例中的标签1会被分成两个不同的标签,这是没有用的)。如果需要,我有创建年-月-日-小时日期的数据。
任何帮助(或改进这个问题的建议)都将非常感谢。谢谢!
发布于 2019-06-15 08:26:43
如果停机可以从2月延长到3月,那么我们还必须知道年份,因此假设year
商店使用ISOdatetime
将年份转换为POSIXct,取连续的差值,比较1小时并获得累积和。
year <- 2000
transform(DF, outage_tag =
cumsum(c(1, diff(ISOdatetime(year, month, day, hour-1, 0, 0, tz = "GMT")) != 1)))
给予:
month day hour outage_tag
1 1 2 23 1
2 1 2 24 1
3 1 3 1 1
4 1 3 2 1
5 3 5 13 2
6 3 5 14 2
7 3 5 15 2
备注
DF <- structure(list(month = c(1L, 1L, 1L, 1L, 3L, 3L, 3L), day = c(2L,
2L, 3L, 3L, 5L, 5L, 5L), hour = c(23L, 24L, 1L, 2L, 13L, 14L,
15L)), class = "data.frame",
row.names = c(NA, -7L))
https://stackoverflow.com/questions/56606149
复制相似问题