我有一个csv,间隔15分钟,时间序列的数据涵盖了几年。数据格式示例:
Time stamp Value
07/07/2003 08:00 10
07/07/2003 08:15 10
07/07/2003 08:30 10.5
07/07/2003 08:45 11
07/07/2003 09:00 13
07/07/2003 09:15 15
07/07/2003 09:30 14.5
07/07/2003 09:45 14
07/07/2003 10:00 10
07/07/2003 10:15 9
07/07/2003 10:30 8
07/07/2003 10:45 11
07/07/2003 11:00 12
07/07/2003 11:15 15
07/07/2003 11:30 13
07/07/2003 11:45 12
07/07/2003 12:00 10
我想读到r studio,并绘制一个时间序列,其中x轴上带有时间戳,y上带有值。
问题的第二部分是计算值超过某个阈值然后又回落到该阈值以下的次数。例如,示例数据中=> 12,总共8次,发生在时间序列内的2个独立实例或组中。我对超出阈值的次数感兴趣,但是关键是要计算时间序列在上述分组中高于阈值的次数。
答案 0 :(得分:0)
以下是绘制数据的方法。您需要使用as.POSIXct
将时间戳转换为日期/时间对象:
df <- read.table(text=" Time_stamp Value
'07/07/2003 08:00' 10
'07/07/2003 08:15' 10
'07/07/2003 08:30' 10.5
'07/07/2003 08:45' 11
'07/07/2003 09:00' 13
'07/07/2003 09:15' 15
'07/07/2003 09:30' 14.5
'07/07/2003 09:45' 14
'07/07/2003 10:00' 10
'07/07/2003 10:15' 9
'07/07/2003 10:30' 8
'07/07/2003 10:45' 11
'07/07/2003 11:00' 12
'07/07/2003 11:15' 15
'07/07/2003 11:30' 13
'07/07/2003 11:45' 12
'07/07/2003 12:00' 10", header=TRUE, stringsAsFactors=FALSE)
df$Time_stamp <- as.POSIXct(df$Time_stamp, format="%m/%d/%Y %H:%M")
library(ggplot2)
ggplot(data=df, aes(x=Time_stamp, y=Value))+
geom_line()
这是获取等于12以上的序列的方法。我正在使用dplyr
中的rleid
和data.table
library(dplyr)
library(data.table)
df%>%
mutate(above=ifelse(df$Value<12, NA,(rleid(df$Value>=12))))%>%
na.omit()%>%
mutate(above=rleid(above))
Time_stamp Value above
1 2003-07-07 09:00:00 13.0 1
2 2003-07-07 09:15:00 15.0 1
3 2003-07-07 09:30:00 14.5 1
4 2003-07-07 09:45:00 14.0 1
5 2003-07-07 11:00:00 12.0 2
6 2003-07-07 11:15:00 15.0 2
7 2003-07-07 11:30:00 13.0 2
8 2003-07-07 11:45:00 12.0 2