我想查看日期的频率,因为它们显示为一周中的几天以及每小时
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:
- 根据星期几显示观察频率
- 根据时间显示观察频率
因此,对于 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))
我有一个日期和时间的数据框 (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:
- 根据星期几显示观察频率
- 根据时间显示观察频率
因此,对于 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))