在R中,我正在查看显示模拟的电力系统中断并需要标记连续中断的方法的数据。数据是按小时计算的,所以我正在寻找可以识别连续时间,然后按顺序中断的数据。我无法标记持续到午夜的中断。
我尝试了几种方法,但是遇到了连续几天停机的问题。例如,我可以标记从8小时到20小时的12个小时的停机,但是如果停机时间从第1天的20小时到第2天的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将分成2个不同的标签,这没有用)。如果需要,我有数据可以创建年-月-日-小时的日期。
任何帮助(或改进此问题的建议)将不胜感激。谢谢!
答案 0 :(得分:0)
如果停机时间可以从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))