我有一个数据框,其中包含一个带有时间戳的列(称为“时间戳”)和一个包含空气污染物浓度的列(称为“值”)。

我有一个空气污染物的阈值,比方说11 (例如),我想要绘制浓度与时间的关系图,在达到阈值之前的5个小时内,直到达到阈值后的24小时,所有浓度达到或超过11的情况。
我想我可以弄清楚图表,但我在这一点上的主要问题是对达到阈值之前和之后的数据进行子集和存储。我该怎么做,有什么建议吗?
谢谢。
发布于 2017-07-05 04:00:23
我很抱歉下面的代码有点让人困惑。然而,我认为它应该是这样工作的:
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)

https://stackoverflow.com/questions/44912313
复制相似问题