我有一个特定停车场的占用率数据,持续时间为数周,时间间隔为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的每周模式,我想我需要有一个WeekdayTime组合变量,可以在折线图的x轴上绘制。您是否知道这种格式是否存在以及如何在x轴上绘制工作日时间组合(例如)ggplot?
非常感谢提前!
答案 0 :(得分:0)
我只回答你的第一个问题。
使用dplyr
我们可以先创建时间和工作日,然后再做一个简单的summarise
。这是未经测试的,因为您的数据没有不同的组合。
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)
答案 1 :(得分:0)
要创建分组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
这里重要的一点是format(DateTime, '%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)