我有一个包含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软件包。
答案 0 :(得分:1)
我们可以使用floor_date
中的lubridate
以hour
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