首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >标记多天内的连续小时组

标记多天内的连续小时组
EN

Stack Overflow用户
提问于 2019-06-15 07:29:57
回答 1查看 29关注 0票数 0

在R中,我正在查看显示模拟电力系统停机的数据,并且需要一种方法来标记连续停电。数据是每小时一次的,所以我正在寻找能够识别连续小时,然后在序列中中断的东西。我在标记持续到午夜的中断时遇到了麻烦。

我已经尝试了几种方法,但总是遇到长达数天的停机问题。例如,我可以标记从8小时到20小时的12小时停机,但如果停机从第一天的20小时到第二天的12小时(这些停机最终看起来像两个不同的、更短的停机),它就会拆分标签。

代码语言:javascript
运行
复制
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会被分成两个不同的标签,这是没有用的)。如果需要,我有创建年-月-日-小时日期的数据。

任何帮助(或改进这个问题的建议)都将非常感谢。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-15 08:26:43

如果停机可以从2月延长到3月,那么我们还必须知道年份,因此假设year商店使用ISOdatetime将年份转换为POSIXct,取连续的差值,比较1小时并获得累积和。

代码语言:javascript
运行
复制
year <- 2000
transform(DF, outage_tag = 
  cumsum(c(1, diff(ISOdatetime(year, month, day, hour-1, 0, 0, tz = "GMT")) != 1)))

给予:

代码语言:javascript
运行
复制
  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

备注

代码语言:javascript
运行
复制
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))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56606149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档