Как сделать floor_date() в dbplyr

Я пытаюсь агрегировать данные временных рядов минутного уровня до часового уровня с помощью усреднения.

Для этого я хочу рассчитать столбец часа, в котором указаны день и час, когда произошло чтение. Затем я могу выполнить простой 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))

person Zafar    schedule 09.07.2018    source источник


Ответы (2)


РАБОТАЕТ, НО НУЖДАЕТСЯ В УЛУЧШЕНИИ

my_table %>%
      mutate(hour = "hour",
             time_hour = DATEADD(hour, DATEDIFF(hour, 0, time), 0)) %>%
      select(-hour)
person Zafar    schedule 20.07.2018
comment
Почему ваш собственный ответ является решением, хотя он нуждается в улучшении? - person Wolfgang Kais; 23.07.2018
comment
Прошло несколько недель, и это лучшее, что я нашел. Если у кого-то есть лучшее решение, я с удовольствием отмечу его решение как лучшее :) - person Zafar; 23.07.2018

person    schedule
comment
Спасибо за публикацию, так стало намного лучше. В настоящее время у меня нет возможности проверить решение, но я даю этот ответ в пользу сомнения. Если следующий, кто столкнется с этим, может проголосовать/прокомментировать, чтобы подтвердить, что это работает, я был бы обязан. - person Zafar; 08.01.2020