如何获取多列时间序列数据框中的每小时平均值

时间:2019-04-24 15:32:39

标签: r dplyr time-series

我有一个包含3列的时间序列数据,其中包含日期,能量值和站点名称。 我想分别获取每个站点的每小时能量平均值。

我的数据看起来像这样

  

df

     Datetime          Energy  Station
1 2016-01-01 07:19:00 743.0253   Ajmer
2 2016-01-01 07:20:00 765.7225   Ajmer
3 2016-01-01 07:21:00 788.1493   Ajmer
4 2016-01-01 08:20:00 834.7815   Ajmer
5 2016-01-01 08:21:00 857.3012   Ajmer
6 2016-01-31 16:58:00 3427.098  Kotada
7 2016-01-31 16:59:00 3397.591  Kotada
8 2016-01-31 17:00:00 3344.149  Kotada
9 2016-01-31 17:01:00 3270.803  Kotada

预期输出:

     Datetime          Energy    Station
1. 2016-01-01 07:00:00 765.6324   Ajmer
2. 2016-01-01 08:00:00 846.0413   Ajmer
3. 2016-01-01 16:00:00 3412.345   Kotada
4. 2016-01-01 17:00:00 3307.476   Kotada

我尝试过使用group_by函数按电台名称形成分组的数据帧,然后使用聚合函数获取每小时平均值。但是它不起作用。

> byStn=df %>% group_by(Station)
> hour_byStn=byStn %>% 
+            aggregate(energy,                                      
+                       list(hourtime = cut(Datetime, breaks="hour")),  
+                       mean, na.rm = TRUE)

我获得了以下错误:     剪切错误(日期时间,间隔=“小时”):找不到对象“日期时间”。

能告诉我该怎么做吗?这也是我第一次使用时间序列数据和dpylr软件包。

2 个答案:

答案 0 :(得分:1)

我们可以使用floor_date中的lubridatehour ly间隔间隔'DateTime',将group_by中的'DateTime'与'Station'一起使用并获得{{ 1}}的“能源”

mean

数据

library(lubridate)
library(tidyverse)
df %>%
    group_by(Datetime = floor_date(Datetime, "hour"), Station) %>%
    summarise(Energy = mean(Energy, na.rm = TRUE))
# A tibble: 4 x 3
# Groups:   Datetime [4]
#  Datetime            Station Energy
#  <dttm>              <chr>    <dbl>
#1 2016-01-01 07:00:00 Ajmer     766.
#2 2016-01-01 08:00:00 Ajmer     846.
#3 2016-01-31 16:00:00 Kotada   3412.
#4 2016-01-31 17:00:00 Kotada   3307.

答案 1 :(得分:1)

我还没有测试过,但是您想要一些类似的东西...

df %>%
    mutate(hourtime = cut(Datetime, breaks='hour')) %>%
    group_by(Station, hourtime) %>%
    summarise(avg_energy = mean(Energy, na.rm = T))

我建议也许阅读一些基本的dplyr语法。我刚开始使用它时就虔诚地引用了此内容:https://cran.r-project.org/web/packages/dplyr/vignettes/dplyr.html