在R经由阈的最大持续时间的计算(时间序列)

问题描述 投票:0回答:1

我在5分钟分辨率的XTS-时间序列的温度数据。

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
  1. 我要计算的温度超过一定阈值时,持续时间最长。 (比方说20°C)
  2. 我要计算所有与它们的持续温度超过某一阈值的周期。
  3. 我创建我的XTS-数据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
  4. 然后我创建一个只超过阈值的数据子集: 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 但现在即时通讯具有麻烦,以计算温度超过阈值的事件的持续时间。我不知道如何来识别所连接的周期,并计算其持续时间?

我会很高兴,如果你有这个问题(这是我的第一个线程,所以请原谅小错误)如果您需要在我的数据的详细信息,随便问一个解决方案。

r time xts duration threshold
1个回答
0
投票

这可能工作。我拿为例这样的数据:

df <- structure(list(Time = structure(c(1463911500, 1463911800, 1463912100, 
1463912400, 1463912700, 1463913000), class = c("POSIXct", "POSIXt"
), tzone = ""), Temp = c(20.043, 20.234, 6.329, 20.424, 20.615, 
20.805)), row.names = c(NA, -6L), class = "data.frame")

> df
                 Time   Temp
1 2016-05-22 12:05:00 20.043
2 2016-05-22 12:10:00 20.234
3 2016-05-22 12:15:00  6.329
4 2016-05-22 12:20:00 20.424
5 2016-05-22 12:25:00 20.615
6 2016-05-22 12:30:00 20.805

library(dplyr)
df %>% 
  # add id for different periods/events
  mutate(tmp_Temp = Temp > 20, id = rleid(tmp_Temp)) %>% 
  # keep only periods with high temperature
  filter(tmp_Temp) %>%
  # for each period/event, get its duration
  group_by(id) %>%
  summarise(event_duration = difftime(last(Time), first(Time)))


     id event_duration
  <int> <time>        
1     1  5 mins       
2     3 10 mins       
© www.soinside.com 2019 - 2024. All rights reserved.