如何减去xts中的行

时间:2015-09-07 17:16:01

标签: r xts quantmod

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

1 个答案:

答案 0 :(得分:3)

对于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引用数据)的惯例,以便使用更多标准的正k约定来引用历史(而非未来)数据。

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

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