如何减去xts中的行

How to subtract rows in xts

我正在使用 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)

对于 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 引用 future[=27= 中的数据]) 使用更标准的积极惯例 k 来参考历史(而非未来)数据。


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

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