聚合 xts 核心数据以防重复索引

问题描述 投票:0回答:1

假设我有以下带有重复时间信息的 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

我的想法是分解完整的对象,在必要时聚合并再次重新绑定......但我想这对于大型对象来说效率相当低。有什么想法吗?

r xts zoo
1个回答
0
投票

使用

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")))
© www.soinside.com 2019 - 2024. All rights reserved.