【问题标题】:How to subtract rows in xts如何减去xts中的行
【发布时间】:2015-09-08 02:16:30
【问题描述】:

我正在使用 quantmod,我需要找出今天的收盘价和第 50 天的收盘价之间的差异。

我试过这样

library(quantmod) 
tickers = 'AAPL'
symbol = getSymbols(tickers,from="2014-04-01",auto.assign=F)
change =(tail(Cl(symbol), 50)[1]-tail(Cl(symbol), 1)[1])
change

但我无法减去它并得到这个错误

Data:
numeric(0)

Index:
numeric(0)

【问题讨论】:

    标签: r xts quantmod


    【解决方案1】:

    对于 xts 对象,二元数学和逻辑运算符总是在执行操作之前将两个对象按其索引对齐。因此,如果您想对不同时间戳的观察结果使用这些运算符,则需要使用lag 来适当地对齐索引值。

    require(xts)
    data(sample_matrix)
    x <- as.xts(sample_matrix)
    x$diff50 <- lag(x$Close, 50) - x$Close
    

    注意lag.xts 打破了lag.tslag.zoo 的约定(其中一个肯定的k 引用未来中的数据)以使用更标准的肯定@987654327 约定@ 引用历史(不是未来)数据。


    如果只想减去 xts 对象的单个时间戳出现的标量值,可以使用coredata 删除索引属性。

    nr <- nrow(symbol)
    change <- coredata(Cl(symbol)[nr-50]) - Cl(symbol)[nr]
    

    【讨论】:

    • 收到此错误 Error in hasTsp(x) : attempt to set an attribute on NULL 。有关更多信息,我已添加其余代码
    • @Eka:使用 CRAN 和 GitHub 中的 quantmod 和 xts,您问题中的代码对我来说效果很好。请在您的问题中编辑sessionInfo()traceback() 的输出(在引发错误的行之后)。
    • 这是代码 symbol$diff50 &lt;- lag(symbol$Close, 50) - symbol$Close 和回溯结果 3: hasTsp(x) 2: lag.default(symbol$Close, 50) 1: lag(symbol$Close, 50) 。我不知道您是否正确理解了我,我只期望一个变量结果是第 50 天收盘价(之前)- 今天/最近的市场收盘价
    • lag.default 在不应该发送的时候被发送。这可能是因为您附加了 dplyr,它掩盖了 stats::lag,并中断了方法调度。
    猜你喜欢
    • 1970-01-01
    • 2013-05-27
    • 2019-12-31
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 2022-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多