Я пытаюсь агрегировать данные временных рядов минутного уровня до часового уровня с помощью усреднения.
Для этого я хочу рассчитать столбец часа, в котором указаны день и час, когда произошло чтение. Затем я могу выполнить простой group_by
summarise
. Например, мой tbl_df
выглядит так:
# Database: Microsoft SQL Server 13.00.4001[<SERVER>/<Project>]
eGauge time Channel End_Use Metric Circuit Reading mean_lag
<int> <chr> <chr> <chr> <chr> <chr> <dbl> <dbl>
1 30739 2018-07-06 20:04:00.000 8.0 Clothes Washer P <NA> 0.000033333 60
2 30739 2018-07-06 20:13:00.000 3.0 Clothes Dryer P <NA> 0.000833333 60
3 30739 2018-07-06 21:16:00.000 6.0 Cooktop P <NA> 0.000050000 60
4 30739 2018-07-06 21:00:00.000 3.0 Clothes Dryer P <NA> 0.000833333 60
5 30739 2018-07-06 21:46:00.000 8.0 Clothes Washer P <NA> 0.000016667 60
6 30739 2018-07-07 02:06:00.000 3.0 Clothes Dryer P <NA> 0.001016667 1
7 30739 2018-07-07 08:52:00.000 1.0 Service Mains P <NA> 1.814516667 1
8 30739 2018-07-07 08:52:00.000 3.0 Clothes Dryer P <NA> 0.001050000 1
9 30739 2018-07-07 08:52:00.000 4.0 Central AC P <NA> 0.043000000 1
10 30739 2018-07-07 08:52:00.000 5.0 Oven P <NA> 0.021333333 1
и я бы хотел, чтобы новый столбец был таким: 2018-07-06 20:00:00.000
или 2018-07-06 20:00:00.000
.
Обычно я бы использовал floor_date(time, "hour")
из lubridate
или даже str_replace(time, ".{2}(?=:[^:]*$)", "00")
, но ни один из них не работает для меня с моим подключением к SQL Server.
Любая идея, как это делается в R? Ответ должен быть кодом R и предпочтительно кодом dplyr, например:
# NOT WORKING
my_table %>%
mutate(time_hour = floor_date(time, "hour"))
or
# NOT WORKING
my_table %>%
mutate(time_hour = DATEADD('hour', DATEDIFF('hour', 0, time), 0))