【问题标题】:Run analysis only on a intraday time period - zoo仅在日内时间段运行分析 - 动物园
【发布时间】:2021-04-19 03:31:04
【问题描述】:

我需要从上午 10 点到下午 4 点运行分析。 原始数据从上午 9 点到下午 5 点,每天运行一年。 如何仅包含指定的分析时间段?

动物园里的窗户也无济于事。

结构(c(0, 7.12149266486255e-05, 0.000142429853297251, 0.000213644779945877, 0.000284859706594502, 0.000356074633243128, 0.000427289559891753, 0.000498504486540379, 0.000569719413189004, 0.00064093433983763, 0.000712149266486256, 0.000783364193134881, 0.000854579119783507, 0.000925794046432132, 0.000997008973080758, 0.00106822389972938, 0.00113943882637801, 0.00121065375302663, 0.00128186867967526, 0.00135308360632389, 0.00142429853297251, 0.00149551345962114, 0.00156672838626976, 0.00163794331291839, 0.00170915823956701, 0.00178037316621564, 0.00185158809286426, 0.00192280301951289, 0.00199401794616152,0.00206523287281014),索引=结构(c(1009942620, 1009942680, 1009942740, 1009942800, 1009942860, 1009942920, 1009942980, 1009943040, 1009943100, 1009943160, 1009943220, 1009943280, 1009943340, 1009943400, 1009943460, 1009943520, 1009943580, 1009943640, 1009943700, 1009943760, 1009943820, 1009943880, 1009943940, 1009944000, 1009944060, 1009944120, 1009944180, 1009944240, 1009944300, 1009944360), class= c("POSIXct", "POSIXt")), class= "动物园")

如何选择时间段 > 上午 10 点和时间段

【问题讨论】:

  • 我们至少需要了解数据框的外观。
  • 添加了 dput 输出

标签: r xts zoo


【解决方案1】:

如果 z 是动物园对象,那么

1) 使用它来提取每个时间点的小时,然后仅将其子集为 10、11、12、13、14 或 15 的小时。

z[format(time(z), "%H") %in% 10:15]

2) 或使用类似但使用 POSIXlt 获取小时的替代方法:

z[as.POSIXlt(time(z))$hour %in% 10:15]

3) 或将系列转换为 xts 并使用:

x <- as.xts(z)["T10:00/T15:00"]
drop(as.zoo(x))

如果可以返回 xts 系列,则省略第二行。

时区

请确保您的时区设置正确,因为一个时区的时间与另一个时区的时间不同。

我们可以这样查询会话的当前时区:

Sys.timezone()

并且可以这样设置:

Sys.setenv(TZ = "...")

其中 ... 替换为所需的时区。常用设置有:

Sys.setenv(TZ = "GMT")
Sys.setenv(TZ = "") # restore default

以下将显示可以使用的可能时区:

OlsonNames()

只有在会话的时区尚未设置为数据的时区时,您才需要所有这些。

【讨论】:

  • 怎么能减少到分钟 - 例如:上午 10:15 到下午 15:45
  • 在 (3) 中使用“T10:15/T15:45”。
【解决方案2】:

您可以构建一个 tibble 用于分析时间、价值和小时信息。然后,您只能在上午 10 点到下午 4 点之间filter 行。

library(dplyr)
library(zoo)

tibble(time = index(df), 
       value = coredata(df), 
       hour = lubridate::hour(time)) %>%
  filter(between(hour, 10, 15)) -> result

result

【讨论】:

  • 对整年的数据进行处理会很乏味。此外,当时间不能明确指定时,动物园和 xts 中的时间索引有什么用?
  • 为什么会很乏味?
猜你喜欢
  • 1970-01-01
  • 2012-03-30
  • 2012-02-27
  • 1970-01-01
  • 2011-04-08
  • 2011-09-15
  • 2013-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多