首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在R中将给定的时间序列数据集划分为4小时窗口

如何在R中将给定的时间序列数据集划分为4小时窗口
EN

Stack Overflow用户
提问于 2015-11-02 14:57:25
回答 2查看 330关注 0票数 1

我每天都有这样的时间序列数据。

代码语言:javascript
运行
复制
Datetime <- c("2015-09-29 00:00:13", "2015-09-29 00:45:00", "2015-09-29 02:53:20", "2015-09-29 03:22:18", 
              "2015-09-29 05:42:10", "2015-09-29 05:55:50", "2015-09-29 06:14:10", "2015-09-29 07:42:16",
              "2015-09-29 08:31:15", "2015-09-29 09:13:10", "2015-09-29 11:45:14", "2015-09-29 11:56:00", 
              "2015-09-29 13:44:00", "2015-09-29 14:41:20", "2015-09-29 15:33:10", "2015-09-29 15:24:00",
              "2015-09-29 17:24:12", "2015-09-29 17:28:16", "2015-09-29 18:22:34",  
              "2015-09-29 21:34:31", "2015-09-29 22:48:20", "2015-09-29 22:22:22", "2015-09-29 23:38:22")
Measurement <- c(0.6,0.4,0.2,0.5,0.8,0.6,0.7,0.3,0.8,0.8,
                 0.2,0.8,0.2,0.35,0.8,0.4,0.4,0.6,0.1,0.9,
                 0.6,0.2,0.2)

df1 <- data.frame(Datetime,Measurement)

我想把这个数据帧划分成4个小时的窗口并绘制它们,所以我得到了6个地块(上午12点到4点,上午4点到8点,8点到12点,下午12点到下午4点,4点到8点,8点到12点)。

我这样做是为了使用data.table将其划分为12小时窗口(AM & PM)。

代码语言:javascript
运行
复制
setDT(df1)
df1[, `:=`( datetime = as.IDate(Datetime), ante_post = c("AM","PM")[1+(hour(Datetime) >= 12)] ) ]

我想做一件类似的事情,但是有一个4小时的窗口,也有一个子集dataframe (6个dataframes)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-02 15:23:17

以下是一种主要使用cut并通过lubridate::hour提取hour的方法

代码语言:javascript
运行
复制
library(lubridate)
library(ggplot2)

df1$Datetime <- as.POSIXct(df1$Datetime)

labels_four_hr <- c("12AM - 4AM", "4AM - 8AM", "8AM - 12PM", "12PM - 4PM", "4PM - 8PM", "8PM - 12AM")
labels_six_hr  <- c("12AM - 6AM", "6AM - 12PM", "12PM - 6PM", "6PM = 12AM")

df <- df1 %>%
  mutate(hour = hour(Datetime),
         seg_four_hr = cut(hour, breaks = 0:6 / 6 * 24, include.lowest = TRUE, labels = labels_four_hr),
          seg_six_hr = cut(hour, breaks = 0:4 / 4 * 24, include.lowest = TRUE, labels = labels_six_hr))


ggplot(df, aes(x = Datetime, y = Measurement)) +
  geom_point() +
  facet_wrap(~ seg_four_hr)

ggplot(df, aes(x = Datetime, y = Measurement)) +
  geom_point() +
  facet_wrap(~ seg_six_hr)
票数 1
EN

Stack Overflow用户

发布于 2015-11-02 15:21:17

hour(Datetime)给出了一个整数(0-23),对应于事件发生的时间。通过使用整数除法(%/%操作符),可以轻松地将数据表划分为4小时窗口,并使用ggplot2绘制所有内容:

代码语言:javascript
运行
复制
library(ggplot2)
df1[,group:=1+hour(Datetime)%/%4]
qplot(data=df1,x=Datetime,y=Measurement,facets=group~.)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33480503

复制
相关文章

相似问题

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