这个想法和你上一个问题一样
将数据分成几天,并对每一天应用一个函数。下面split(dxts, "days")
将创建一个列表,其中每个元素都是 1 天的数据。lapply
将对每一天应用一个功能。
set.seed(123)
full <- .xts(rnorm(2880), 1:2880*5*60)
mrv <- lapply(split(full, "days"), function(x) {
#return an xts-object, which requires a timeBased index
xts(MedRV(x), end(x)) #use the last timestamp of the day
})
然后rbind
将结果转换为单个 xts 对象
do.call(rbind, mrv)
# [,1]
# 1969-12-31 23:55:00 58.2340
# 1970-01-01 23:55:00 268.5672
# 1970-01-02 23:55:00 260.3016
# 1970-01-03 23:55:00 310.5664
# 1970-01-04 23:55:00 302.1562
# 1970-01-05 23:55:00 272.9567
# 1970-01-06 23:55:00 291.0333
# 1970-01-07 23:55:00 309.7571
# 1970-01-08 23:55:00 229.9853
# 1970-01-09 23:55:00 298.3878
# 1970-01-10 18:00:00 215.6014
编辑/替代语法
mrv <- lapply(split(full, "days"), MedRV)
names(mrv) <- index(full)[endpoints(full, on="days")]
as.xts(do.call(rbind, mrv))