'Is there a way to group data according to time in R?

I'm working with trip ticket data and it includes a column with dates and times. I'm want to group trips according to Morning(05:00 - 10:59), Lunch(11:00-12:59), Afternoon(13:00-17:59), Evening(18:00-23:59), and Dawn/Graveyard(00:00-04:59) and then count the number of trips (by means of counting the unique values in the trip_id column) for each of those categories.

Only I don't know how to group/summarize according to time values. Is this possible in R?

             trip_id          start_time            end_time day_of_week
1   CFA86D4455AA1030 2021-03-16 08:32:30 2021-03-16 08:36:34     Tuesday
2   30D9DC61227D1AF3 2021-03-28 01:26:28 2021-03-28 01:36:55      Sunday
3   846D87A15682A284 2021-03-11 21:17:29 2021-03-11 21:33:53    Thursday
4   994D05AA75A168F2 2021-03-11 13:26:42 2021-03-11 13:55:41    Thursday
5   DF7464FBE92D8308 2021-03-21 09:09:37 2021-03-21 09:27:33      Sunday
r


Solution 1:[1]

Here's a solution with hour() and case_when().

library(tidyverse)
library(lubridate)
#> 
#> Attaching package: 'lubridate'
#> The following objects are masked from 'package:base':
#> 
#>     date, intersect, setdiff, union

trip <- tibble(start_time = mdy_hm("1/1/2022 1:00") + minutes(seq(0, 700, 15)))

trip <- trip %>%
  mutate(
    hr = hour(start_time),
    time_of_day = case_when(
      hr >= 5  & hr <  11 ~ "morning",
      hr >= 11 & hr <  13 ~ "afternoon",
      TRUE ~ "fill in the rest yourself :)"
    )
  )
print(trip)
#> # A tibble: 47 x 3
#>    start_time             hr time_of_day                 
#>    <dttm>              <int> <chr>                       
#>  1 2022-01-01 01:00:00     1 fill in the rest yourself :)
#>  2 2022-01-01 01:15:00     1 fill in the rest yourself :)
#>  3 2022-01-01 01:30:00     1 fill in the rest yourself :)
#>  4 2022-01-01 01:45:00     1 fill in the rest yourself :)
#>  5 2022-01-01 02:00:00     2 fill in the rest yourself :)
#>  6 2022-01-01 02:15:00     2 fill in the rest yourself :)
#>  7 2022-01-01 02:30:00     2 fill in the rest yourself :)
#>  8 2022-01-01 02:45:00     2 fill in the rest yourself :)
#>  9 2022-01-01 03:00:00     3 fill in the rest yourself :)
#> 10 2022-01-01 03:15:00     3 fill in the rest yourself :)
#> # ... with 37 more rows

trips <- trip %>%
  count(time_of_day)
print(trips)
#> # A tibble: 3 x 2
#>   time_of_day                      n
#>   <chr>                        <int>
#> 1 afternoon                        7
#> 2 fill in the rest yourself :)    16
#> 3 morning                         24

Created on 2022-03-21 by the reprex package (v2.0.1)

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Arthur