2015-09-07 32 views
4

我正在使用quantmod,我需要查找今日收盘价与第50日收盘价之间的差额。如何减去xts中的行

我试过这样

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) 

回答

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] 
+0

获取此错误hasTsp(x)中的错误:尝试在NULL上设置属性。欲了解更多信息,我已添加其余的代码 – Eka

+0

@EKA:您的问题中的代码适用于我使用来自CRAN和GitHub的quantmod和xts。请编辑你的问题'sessionInfo()'和'traceback()'(在引发错误的行后面)的输出。 –

+0

这是符号$ diff50 < - lag(符号$ Close,50) - 符号$ Close'和回溯结果'3:hasTsp(x) 2:lag.default(符号$ Close,50) 1:滞后(符号$ Close,50)'。我不知道你是否正确理解我,我期待只有一个变量结果是第50天收盘价值(上一个) - 今天/最近的市场收盘价 – Eka