假设我有以下带有重复时间信息的 xts 对象:
library(xts)
x <- xts(1:5,
c("2024-04-19", "2024-04-19", "2024-04-20", "2024-04-21", "2024-04-21") |> as.Date())
x
#> [,1]
#> 2024-04-19 1
#> 2024-04-19 2
#> 2024-04-20 3
#> 2024-04-21 4
#> 2024-04-21 5
目前,我只是简单地丢弃重复的条目,以一种相当幼稚的方式“清理”对象,以便进一步使用/分析:
ind <- zoo::index(x) |> duplicated()
x[!ind, ]
#> [,1]
#> 2024-04-19 1
#> 2024-04-20 3
#> 2024-04-21 4
我想将其扩展到更复杂的方法(至少从我的角度来看),我可以选择一些通用的聚合函数应用于重复的索引,返回类 xts 的对象,例如
xts_agr_duplicates(x, "mean")
#> [,1]
#> 2024-04-19 1.5
#> 2024-04-20 3
#> 2024-04-21 4.5
xts_agr_duplicates(x, "sum")
#> [,1]
#> 2024-04-19 3
#> 2024-04-20 3
#> 2024-04-21 9
我的想法是分解完整的对象,在必要时聚合并再次重新绑定......但我想这对于大型对象来说效率相当低。有什么想法吗?
使用
aggregate.zoo
。在下面的代码中,将 mean
替换为您喜欢的任何函数。
library(xts)
aggregate(x, c, mean) |> as.xts()
## [,1]
## 2024-04-19 1.5
## 2024-04-20 3.0
## 2024-04-21 4.5
如果您首先获得
x
的方式是从文件中读取它
然后使用 read.zoo
。
write.zoo(x, "myfile.dat") # create test file
read.zoo("myfile.dat", aggregate = mean) |> as.xts()
## [,1]
## 2024-04-19 1.5
## 2024-04-20 3.0
## 2024-04-21 4.5
以可重现的形式输入。
library(xts)
x <- xts(1:5,
as.Date(c("2024-04-19", "2024-04-19", "2024-04-20", "2024-04-21", "2024-04-21")))