如何按时间对 R 中的 XTS 对象进行分组?
How to group by time for XTS object in R?
我在 R 中有一个时间序列 xts 对象。
基本上时间序列持续时间是几个月,我想知道不同时间点的趋势。
我想获得不同时间点的中位数或均值。
library(xts)
library(lubridate)
Time <- seq(ymd_hms("2019-01-01 00:00:00"), ymd_hms("2019-03-29 23:59:59"), "hour")
length(Time)
Data <- rnorm(2112, 1, 5)
Time_Series <- xts(x = Data , order.by = Time)
以此代码为例
如何获得时间 00:00:00 的数据的平均值?同样,01:00:00、02:00:00、03:00:00 ...
中数据的平均值
提前感谢您的帮助!
一种方法是将时间序列转换为数据帧并按小时计算平均值。
library(dplyr)
library(lubridate)
Time_Series %>%
zoo::fortify.zoo() %>%
group_by(hour = hour(Index)) %>%
summarise(mn = mean(Data))
# A tibble: 24 x 2
# hour mn
# <int> <dbl>
# 1 0 1.53
# 2 1 0.414
# 3 2 1.24
# 4 3 1.07
# 5 4 1.32
# 6 5 1.34
# 7 6 0.998
# 8 7 -0.615
# 9 8 0.924
#10 9 0.484
# … with 14 more rows
基数为 R 的方法将使用 aggregate
df <- zoo::fortify.zoo(Time_Series)
df$hour <- format(df$Index, "%H")
aggregate(Data~hour, df, mean)
数据
set.seed(23)
Time <- seq(ymd_hms("2019-01-01 00:00:00"), ymd_hms("2019-03-29 23:59:59"), "hour")
Data <- rnorm(2112, 1, 5)
Time_Series <- xts(x = Data , order.by = Time)
names(Time_Series) <- "Data"
这个单行代码使用 aggregate.zoo
生成一个时间为整点的动物园对象。没有使用额外的包。
aggregate(Time_Series, hour, mean)
给予:
0 0.4237426
1 1.8814963
2 1.2917437
3 1.4307028
4 1.3691019
5 0.3762082
6 1.3866948
# ...snip...
请注意,问题中的数据不可重现,因为未使用 set.seed
,所以这只是显示输出的样子。
我在 R 中有一个时间序列 xts 对象。
基本上时间序列持续时间是几个月,我想知道不同时间点的趋势。
我想获得不同时间点的中位数或均值。
library(xts)
library(lubridate)
Time <- seq(ymd_hms("2019-01-01 00:00:00"), ymd_hms("2019-03-29 23:59:59"), "hour")
length(Time)
Data <- rnorm(2112, 1, 5)
Time_Series <- xts(x = Data , order.by = Time)
以此代码为例
如何获得时间 00:00:00 的数据的平均值?同样,01:00:00、02:00:00、03:00:00 ...
中数据的平均值提前感谢您的帮助!
一种方法是将时间序列转换为数据帧并按小时计算平均值。
library(dplyr)
library(lubridate)
Time_Series %>%
zoo::fortify.zoo() %>%
group_by(hour = hour(Index)) %>%
summarise(mn = mean(Data))
# A tibble: 24 x 2
# hour mn
# <int> <dbl>
# 1 0 1.53
# 2 1 0.414
# 3 2 1.24
# 4 3 1.07
# 5 4 1.32
# 6 5 1.34
# 7 6 0.998
# 8 7 -0.615
# 9 8 0.924
#10 9 0.484
# … with 14 more rows
基数为 R 的方法将使用 aggregate
df <- zoo::fortify.zoo(Time_Series)
df$hour <- format(df$Index, "%H")
aggregate(Data~hour, df, mean)
数据
set.seed(23)
Time <- seq(ymd_hms("2019-01-01 00:00:00"), ymd_hms("2019-03-29 23:59:59"), "hour")
Data <- rnorm(2112, 1, 5)
Time_Series <- xts(x = Data , order.by = Time)
names(Time_Series) <- "Data"
这个单行代码使用 aggregate.zoo
生成一个时间为整点的动物园对象。没有使用额外的包。
aggregate(Time_Series, hour, mean)
给予:
0 0.4237426
1 1.8814963
2 1.2917437
3 1.4307028
4 1.3691019
5 0.3762082
6 1.3866948
# ...snip...
请注意,问题中的数据不可重现,因为未使用 set.seed
,所以这只是显示输出的样子。