首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在xts上使用rowSums时保留xts索引

在xts上使用rowSums时保留xts索引
EN

Stack Overflow用户
提问于 2017-05-27 22:48:17
回答 2查看 943关注 0票数 3

在传递xts对象rowSums时,是否存在保留xts对象索引的方法?

目前,我将结果重铸为一个xts对象,但如果rowSums能够简单地返回传递的内容,它的速度似乎还不如原来的那么快。

代码语言:javascript
复制
xts(rowSums(abs(data)),index(data))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-28 04:24:27

有趣的问题。让我们忽略abs的计算,因为它在很多时候与价格无关。如果您关心的是性能问题,下面是针对当前建议的一组时间安排:

代码语言:javascript
复制
library(microbenchmark)
sample.xts <- xts(order.by = as.POSIXct("2004-01-01 00:00:00") + 1:1e6, matrix(rnorm(1e6 *4), ncol = 4), dimnames = list(NULL, c("A", "B", "C", "D")))

# See how quickly rowSum works on just the underlying matrix of data in the timings below:
xx <- coredata(sample.xts)

microbenchmark(
    coredata(sample.xts),
    rowSums(xx),
    rowSums(sample.xts),
    rowSums(coredata(sample.xts)),
.xts(x = rowSums(sample.xts), .index(sample.xts)),
xts(rowSums(coredata(sample.xts)), index(sample.xts)),
xts(rowSums(sample.xts),index(sample.xts)), 
Reduce("+", as.list(sample.xts)), times = 100)

# Unit: milliseconds
#                                                  expr       min        lq      mean    median        uq       max neval
#                                  coredata(sample.xts)  2.558479  2.661242  6.884048  2.817607  6.356423 104.57993   100
#                                           rowSums(xx) 10.314719 10.824184 11.872108 11.289788 12.382614  18.39334   100
#                                   rowSums(sample.xts) 10.358009 10.887609 11.814267 11.335977 12.387085  17.16193   100
#                         rowSums(coredata(sample.xts)) 12.916714 13.839761 18.968731 15.950048 17.836838 113.78552   100
#     .xts(x = rowSums(sample.xts), .index(sample.xts)) 14.402382 15.764736 20.307027 17.808984 19.072600 114.24039   100
# xts(rowSums(coredata(sample.xts)), index(sample.xts)) 20.490542 24.183286 34.251031 25.566188 27.900599 125.93967   100
#           xts(rowSums(sample.xts), index(sample.xts)) 17.436137 19.087269 25.259143 21.923877 22.805013 119.60638   100
#                      Reduce("+", as.list(sample.xts)) 21.745574 26.075326 41.696152 27.669601 30.442397 136.38650   100

y = .xts(x = rowSums(sample.xts), .index(sample.xts))
y2 = xts(rowSums(sample.xts),index(sample.xts))
all.equal(y, y2)
#[1] TRUE

coredata(sample.xts)返回基础数字矩阵。我认为您可以期望的最快的性能是由rowSums(xx)给出的,它可以被认为是一个“基准”。问题是,在xts对象中最快的方法是什么?.xts(x = rowSums(sample.xts), .index(sample.xts))似乎提供了不错的性能。

票数 3
EN

Stack Overflow用户

发布于 2017-05-27 23:50:20

如果您的反对意见必须拆开,并将输入的组件放在一起,那么如果x是您的xts对象,那么尝试以下操作。它直接返回一个xts对象:

代码语言:javascript
复制
Reduce("+", as.list(x))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44222272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档