R 按时间和星期组合对时间序列数据进行分组

R 按时间和星期组合对时间序列数据进行分组,r,plot,time-series,aggregate,R,Plot,Time Series,Aggregate,我有一个特定停车场的占用率数据,时间间隔为5分钟,持续数周 我的数据如下: 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.

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

我的数据如下:

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
我想创建一个平均入住率和上下限值的绘图,以显示整体每周模式。因此,我的数据需要按一天中的时间和一周中的日期组合进行分组

最后,我希望我的数据如下所示:

        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的每周模式,我想我需要一个工作日时间组合变量,它可以绘制在折线图的x轴上。你知道这种格式是否存在,以及我如何用(例如)ggplot在x轴上绘制工作日时间组合


非常感谢

我只回答你的第一个问题

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

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)

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

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
这里重要的一点是
格式(日期时间,%u%H:%M:%S')
这将创建一个新变量,其中
%u
作为工作日,
%H:%M:%S
作为时间

要绘制,请使用以下内容:

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)

请一次问一个问题。提取时间的一个快速方法是使用
格式(如.POSIXct(“2017-01-27 10:24:41”),%H:%M:%S”)
。这应该在逻辑上进行排序,因为0的前缀是个位数(9:00:00变为09:00:00)。我认为
chron
软件包可以更智能地存储时间。是的,我知道如何从DateTime变量中提取时间。但如果我这样做的话,我的数据就不能基于时间进行聚合,对吗?如果我使用
作为.POSIXct
,在变量中
%H:%M:%S
下面,相应的日期将始终阻碍基于工作日的聚合,或者是否会?是否也可以计算95%置信区间的上下边界,而不是特定工作日/时间组合的最小值或最大值?