首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在满足阈值前后的时间范围内存储数据

在满足阈值前后的时间范围内存储数据
EN

Stack Overflow用户
提问于 2017-07-05 02:34:49
回答 1查看 92关注 0票数 1

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

我有一个空气污染物的阈值,比方说11 (例如),我想要绘制浓度与时间的关系图,在达到阈值之前的5个小时内,直到达到阈值后的24小时,所有浓度达到或超过11的情况。

我想我可以弄清楚图表,但我在这一点上的主要问题是对达到阈值之前和之后的数据进行子集和存储。我该怎么做,有什么建议吗?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-05 04:00:23

我很抱歉下面的代码有点让人困惑。然而,我认为它应该是这样工作的:

代码语言:javascript
复制
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列筛选每个事件。

或者,您可以运行以下代码为每个事件创建不同的绘图:

代码语言:javascript
复制
ggplot(final_df, aes(x = timestamp, y = value)) + geom_line() + facet_wrap(~id)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44912313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档