我想查看日期的频率,因为它们显示为一周中的几天以及每小时

I would like to look at frequency of dates as they appear as days of the week as well as hourly

我有一个日期和时间的数据框 (df),如下所示(摘录):

date         time
2019-09-01   05:00 PM
2019-09-01   06:10 PM
2019-09-03   04:13 AM
2019-09-05   12:19 AM
2019-09-05   03:02 AM
2019-09-06   09:22 PM
2019-10-01   05:01 PM
2019-10-01   08:34 PM
2019-10-03   01:11 PM
2019-10-05   07:43 AM
2019-10-05   09:29 PM
2019-10-06   05:22 PM
...          ...

这是数据样本,但我有两个 objective:

  1. 根据星期几显示观察频率
  2. 根据时间显示观察频率

因此,对于 objective 1,我可以创建一个新的计数数据框,如下所示

day_groups <- df %>% 
  group_by(date) %>% 
  summarize(number = n()) 

但是我试图按日期是星期几进行分组,但我不确定该怎么做,Whosebug 说润滑但我在那里苦苦挣扎。

Objective 2 有一些相似之处,但有时会有。因为时间很少相同,所以我不能 'group_by' 计时。相反,我可能做的最好的事情是最近的 30 分钟间隔。如果没有,一个小时就足够了。但基本上,我想显示哪些时间块出现最多,即有多少条目来自 8:00AM -8:30AM 等

此处的目标是以图形方式显示信息。一周中的 1 天出现次数最多,1 天显示哪些时间块的条目最多(例如 30 分钟箱)。

我认为 2 个条形图在这里最有意义,但是欢迎任何有创意的建议!

第 1 部分 - 根据星期几显示观察频率

library(dplyr)
library(lubridate)

df %>%
  mutate(date = as.Date(date), 
         wday = weekdays(date)) %>%
  count(wday)

#  wday         n
#  <chr>    <int>
#1 Friday       1
#2 Saturday     2
#3 Sunday       3
#4 Thursday     3
#5 Tuesday      3

第 2 部分 - 根据时间显示观察频率

df %>%
  mutate(pers = period_to_seconds(hms(format(as.POSIXct(time, 
                format = "%I:%M %p"), "%T"))),
         group = cut(pers, seq(0, 86400, 1800), labels = FALSE)) %>%
  count(group)

#   group     n
#   <int> <int>
# 1     1     1
# 2     7     1
# 3     9     1
# 4    16     1
# 5    27     1
# 6    34     1
# 7    35     2
# 8    37     1
# 9    42     1
#10    43     2

其中 group 一天中每 30 分钟会有一个数字 1-48。

数据

df <- structure(list(date = structure(c(1L, 1L, 2L, 3L, 3L, 4L, 5L, 
5L, 6L, 7L, 7L, 8L), .Label = c("2019-09-01", "2019-09-03", "2019-09-05", 
"2019-09-06", "2019-10-01", "2019-10-03", "2019-10-05", "2019-10-06"
), class = "factor"), time = structure(c(4L, 7L, 3L, 12L, 2L, 
10L, 5L, 9L, 1L, 8L, 11L, 6L), .Label = c("01:11 PM", "03:02 AM", 
"04:13 AM", "05:00 PM", "05:01 PM", "05:22 PM", "06:10 PM", "07:43 AM", 
"08:34 PM", "09:22 PM", "09:29 PM", "12:19 AM"), class = "factor")), 
class = "data.frame", row.names = c(NA, -12L))