r - 如何使用 apply.daily/period.apply 计算 XTS 时间序列中每列的最大值?
问题描述
period.apply
我在高分辨率时间序列分析的情况下使用该函数时遇到问题。
我想以 10 分钟的间隔为我的数据计算统计数据(不同时期的平均值、Stddev 等)。计算每小时意味着工作得很好,就像这个答案中描述的那样。
它创建了一个新的 xts 对象,其中包含为每列计算的平均值。如何计算每列的最大值?
这个可重现的示例描述了我的数据结构:
library(xts)
start <- as.POSIXct("2018-05-18 00:00")
tseq <- seq(from = start, length.out = 1440, by = "10 mins")
Measurings <- data.frame(
Time = tseq,
Temp = sample(10:37,1440, replace = TRUE, set.seed(seed = 10)),
Variable1 = sample(1:200,1440, replace = TRUE, set.seed(seed = 187)),
Variable2 = sample(300:800,1440, replace = TRUE, set.seed(seed = 333))
)
Measurings_xts <- xts(Measurings[,-1], Measurings$Time)
HourEnds <- endpoints(Measurings_xts, "hours")
Measurings_mean <- period.apply(Measurings_xts, HourEnds, mean)
我认为将函数参数从 更改为 很容易mean
,max
如下所示:
Measurings_max <- period.apply(Measurings_xts, HourEnds, max)
它提供输出,但只有一列具有总体最大值。我需要每列的每小时最大值。一个简单的解决方案将不胜感激。
解决方案
该mean
示例按列工作,因为有一个对每一列调用的 zoo 方法mean
(使用此方法是因为 xts 扩展了 zoo)。
该max
示例返回一个数字,因为没有max.xts
ormax.zoo
方法,所以它返回整个 xts/zoo 对象的最大值。
一个简单的解决方案是定义一个辅助函数:
colMax <- function(x, na.rm = FALSE) {
apply(x, 2, max, na.rm = na.rm)
}
然后在您的period.apply
通话中使用它:
epHours <- endpoints(Measurings_xts, "hours")
Measurings_max <- period.apply(Measurings_xts, epHours, colMax)
head(Measurings_max)
# Temp Variable1 Variable2
# 2018-05-18 00:50:00 29 194 787
# 2018-05-18 01:50:00 28 178 605
# 2018-05-18 02:50:00 26 188 756
# 2018-05-18 03:50:00 34 152 444
# 2018-05-18 04:50:00 33 145 724
# 2018-05-18 05:50:00 35 187 621
推荐阅读
- unity3d - 无法让 Unity Mirror Networking 示例游戏在我的电脑和 android 之间连接
- python - 创建特定的 Web Scraper
- powershell - 在powershell中计数?
- c# - 在 2 个字符串之间查找字符串并替换 - 正则表达式
- node.js - 将数组改回json格式后如何返回?
- prolog - DCG:零次或多次,零次或一次,一次或多次出现?
- google-oauth - 使用 Google Oauth 登录 Jupyterhub 时出错
- spring-boot - Spring Boot 中多对一 rs 请求中一篇帖子的 Json 内容
- python - 无法使用“python -i”第二次打开我的源代码
- python - 如何让 IPython 在 python 版本 3.9.1 而不是旧版本 3.7 上运行?