【发布时间】:2019-07-04 19:09:51
【问题描述】:
我有一个 5 分钟分辨率的 xts-timeseries 温度数据。
head(dataset)
Time Temp
2016-04-26 10:00:00 6.877
2016-04-26 10:05:00 6.877
2016-04-26 10:10:00 6.978
2016-04-26 10:15:00 6.978
2016-04-26 10:20:00 6.978
- 我想计算温度超过某个阈值的最长持续时间。 (假设是 20 °C)
- 我想计算温度超过某个阈值的所有持续时间。
-
我从我的 xts-data 创建一个 data.frame:
df=data.frame(Time=index(dataset),coredata(dataset)) head(df) Time Temp 1 2016-04-26 10:00:00 6.877 2 2016-04-26 10:05:00 6.877 3 2016-04-26 10:10:00 6.978 4 2016-04-26 10:15:00 6.978 5 2016-04-26 10:20:00 6.978 6 2016-04-26 10:25:00 7.079 -
然后我创建一个仅包含超过阈值的数据的子集:
sub=(subset(x=df,subset = df$Temp>20)) head(sub) Time Temp 7514 2016-05-22 12:05:00 20.043 7515 2016-05-22 12:10:00 20.234 7516 2016-05-22 12:15:00 20.329 7517 2016-05-22 12:20:00 20.424 7518 2016-05-22 12:25:00 20.615 7519 2016-05-22 12:30:00 20.805但现在我无法计算温度超过阈值的事件持续时间。我不知道如何识别连接期并计算其持续时间?
如果您有这个问题的解决方案,我会很高兴(这是我的第一个帖子,所以请原谅小错误)如果您需要有关我的数据的更多信息,请随时询问。
【问题讨论】:
-
max(rle(dataset$temp> 20)[rle(dataset$temp> 20)$values == T]$lengths)应该适用于您的第一个目标,以防您的数据在整个数据集中具有相同的时间间隔(如您的示例中所示) -
你能提供你预期的输出吗?例如。根据样本数据等,您希望持续多长时间。
-
@Lenvyy:感谢您的回答,不知道 rle() 函数。不幸的是,它不适用于我的数据。我明白了,但我无法产生结果。数据是填空的,因此间隔相同,但函数产生 NULL。但是通过使用 rle() 函数,我找到了一个解决方案,通过使用
r=rle(df$Temp>20) tapply(r$lengths, r$values, max)@arg0naut:我希望它是几小时内
标签: r time xts duration threshold