对于以下代码有点混乱,我深表歉意。但是,我认为它应该像这样工作:
require(tidyverse)
require(lubridate)
# Create example data
timestamp <- c("2017-01-01 00:00:00", "2017-01-01 01:00:00", "2017-01-01 02:00:00",
"2017-01-01 03:00:00", "2017-01-01 04:00:00", "2017-01-01 05:00:00",
"2017-01-01 06:00:00", "2017-01-01 07:00:00", "2017-01-01 08:00:00",
"2017-01-01 09:00:00", "2017-01-01 10:00:00", "2017-01-01 11:00:00")
value <- c(8, 10, 12, 13, 10, 2, 3, 6, 5, 8, 6, 7)
df <- data.frame(timestamp = ymd_hms(timestamp), value = value)
# Find incidents with values over 11
df %>%
mutate(treshold = ifelse(value >= 11, 1, 0)) %>%
filter(treshold == 1) %>%
.$timestamp-> incidents
# Create new data frame to store final data
final_df <- data.frame()
# Loop over incidents and filter for relevant data points
for (i in seq(length(incidents))){
df %>%
filter(timestamp %in% (incidents[i] + dhours(-5:24))) %>%
mutate(id = i) %>%
rbind(final_df, .) -> final_df
}
您现在可以使用最终数据框来创建绘图。因此,您可以使用id 列过滤每个事件。
或者,您可以运行以下代码为每个事件创建一个不同的图:
ggplot(final_df, aes(x = timestamp, y = value)) + geom_line() + facet_wrap(~id)