如何在dbplyr中执行floor_date()

时间:2018-07-09 06:09:04

标签: r sql-server dplyr tidyverse 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.0002018-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"))

# NOT WORKING
my_table %>%
  mutate(time_hour = DATEADD('hour', DATEDIFF('hour', 0, time), 0))

2 个答案:

答案 0 :(得分:1)

my_table %>%
    mutate(time_hour = DATEADD(sql("hour"), DATEDIFF(sql("hour"), 0, time), 0))

答案 1 :(得分:0)

需要改进的工作

my_table %>%
      mutate(hour = "hour",
             time_hour = DATEADD(hour, DATEDIFF(hour, 0, time), 0)) %>%
      select(-hour)