首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按一周中的时间和日组合对时间序列数据进行分组

按一周中的时间和日组合对时间序列数据进行分组
EN

Stack Overflow用户
提问于 2017-03-17 12:10:14
回答 2查看 709关注 0票数 0

我有一个特定停车场的占用率的数据,为期数周,间隔5分钟。

我的数据如下:

代码语言:javascript
复制
head(DataParking)
           DateTime OccupancyRate Weekday
2017-01-27 10:24:41     0.2570423  Friday
2017-01-27 10:29:41     0.2605634  Friday
2017-01-27 10:34:41     0.2535211  Friday
2017-01-27 10:39:41     0.2535211  Friday
2017-01-27 10:44:41     0.2535211  Friday
2017-01-27 10:49:41     0.2535211  Friday

我想创建一个平均占用率和上下边界值的地块,以显示每周的总体格局。因此,我的数据需要按一天和一天的时间组合起来。

最后,我希望我的数据看起来如下:

代码语言:javascript
复制
        Time   Weekday  AvgOccupancyRate  MinOccupancyRate    MaxOccupancyRate
    10:24:41    Friday         0.2570423         0.1770423           0.3670423
    10:29:41    Friday         0.2605634         0.1810423           0.3560423
    10:34:41    Friday         0.2535211         0.1870423           0.3570423
    10:39:41    Friday         0.2535211         0.1770423           0.3570423
    10:44:41    Friday         0.2535211         0.1770423           0.3570423
    10:49:41    Friday         0.2535211         0.1870423           0.3870423

我怎样才能做到这一点?

另一个问题:使用这些数据,我可以绘制出某一天(例如星期五)的数据,这已经给出了一些见解。但是,如果我想从周一00:00到周日23:59绘制每周一次的图形,我想我需要一个WeekdayTime组合变量,它可以在线图的x轴上绘制。您是否知道是否存在这样的格式,以及我如何在x轴上绘制一个工作日时间组合和(例如) ggplot?

事先非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-17 12:25:25

若要创建分组data.frame以绘制所需内容,请执行以下操作:

代码语言:javascript
复制
library(dplyr)

df %>% 
    mutate(Time = format(DateTime, '%u %H:%M:%S')) %>% 
    group_by(Time, Weekday) %>% # Weekday is not really needed but can be clearer to read
    summarize(AvgOccRate = mean(OccupancyRate),
              MinOccRate = min(OccupancyRate),
              MaxOccRate = max(OccupancyRate)) -> res

这里的重要部分是format(DateTime, '%u %H:%M:%S'),它创建了一个新变量,以%u作为工作日,%H:%M:%S作为时间。

然后,用以下几条线来画图:

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

ggplot(res, aes(Time, group = 1)) +
    geom_line(aes(Time, AvgOccRate)) +
    geom_line(aes(Time, MinOccRate), alpha = .5) +
    geom_line(aes(Time, MaxOccRate), alpha = .5)
票数 0
EN

Stack Overflow用户

发布于 2017-03-17 12:23:04

我只回答你的第一个问题。

使用dplyr,我们可以首先创建时间和工作日,然后做一个简单的summarise。这是未经测试的,因为您的数据没有不同的组合。

代码语言:javascript
复制
library(dplyr)

DataParking %>%
  mutate(time = format(as.POSIXct(DateTime), "%H:%M:%S"),             # Thanks to @lmo
         weekday = lubridate::wday(DateTime, label = TRUE)) %>%
  group_by(time, weekday) %>%
  summarise(AvgOccupancyRate = mean(OccupancyRate),
            MinOccupancyRate = min(OccupancyRate),
            MaxOccupancyRate = max(OccupancyRate)) %>%
  select(-DateTime)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42857209

复制
相关文章

相似问题

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