在R中生成新的时间滞后变量

3

我正在使用R中的transform()函数创建一个带有新变量的时间序列对象,但是找不到正确的函数来计算变量C在今天和昨天之间的差异。

目前我的代码如下:

                 O       H       L       C  Typical Range 
2010-07-23 1092.17 1103.73 1087.88 1102.66 1098.090 15.85 
2010-07-26 1102.89 1115.01 1101.30 1115.01 1110.440 13.71  
2010-07-27 1117.36 1120.95 1109.78 1113.84 1114.857 11.17  
2010-07-28 1112.84 1114.66 1103.11 1106.13 1107.967 11.55  
2010-07-29 1108.07 1115.90 1092.82 1101.53 1103.417 23.08  
2010-07-30 1098.44 1106.44 1088.01 1101.60 1098.683 18.43

下一行将使用以下函数添加:
SPX <- transform(SPX, Return = (C - C(yesterday) ) / C(yesterday)))

显然,C(yesterday)是不正确的。我已经尝试了lag()和diff(),但没有找到正确的组合。

奖励问题:如何使Typical变量仅显示到百分位?

1个回答

3

如果您想计算今天和昨天之间的C差异,正确的函数是diff。

> SPX$Return <- diff(SPX$C)
> SPX
                 O       H       L       C  Typical Range Return
2010-07-23 1092.17 1103.73 1087.88 1102.66 1098.090 15.85     NA
2010-07-26 1102.89 1115.01 1101.30 1115.01 1110.440 13.71  12.35
2010-07-27 1117.36 1120.95 1109.78 1113.84 1114.857 11.17  -1.17
2010-07-28 1112.84 1114.66 1103.11 1106.13 1107.967 11.55  -7.71
2010-07-29 1108.07 1115.90 1092.82 1101.53 1103.417 23.08  -4.60
2010-07-30 1098.44 1106.44 1088.01 1101.60 1098.683 18.43   0.07

但是看起来你想要计算变化率,可以使用TTR中的ROC函数进行计算。

> SPX$Return <- ROC(SPX$C)
> SPX
                 O       H       L       C  Typical Range        Return
2010-07-23 1092.17 1103.73 1087.88 1102.66 1098.090 15.85            NA
2010-07-26 1102.89 1115.01 1101.30 1115.01 1110.440 13.71  1.113793e-02
2010-07-27 1117.36 1120.95 1109.78 1113.84 1114.857 11.17 -1.049869e-03
2010-07-28 1112.84 1114.66 1103.11 1106.13 1107.967 11.55 -6.946068e-03
2010-07-29 1108.07 1115.90 1092.82 1101.53 1103.417 23.08 -4.167314e-03
2010-07-30 1098.44 1106.44 1088.01 1101.60 1098.683 18.43  6.354596e-05

谢谢Josh,我以前没听说过ROC()。 很好。 我正忙着处理quantmod中的Delt(),它似乎也可以做同样的事情,但是我遇到了与diff()相同的问题,即:Error in $<-.data.frame(*tmp*, "Diff", value = c(1.74000000000001, : replacement has 900 rows, data has 901但ROC很好用。 嗯。 - Milktrader
2
澄清一点:我上面的示例使用了一个xts对象。错误可能是因为Delt和diff不包括您正在使用的对象类(数据框?)的前导NA。 - Joshua Ulrich
在执行str(SPX)之后,它确实显示为data.frame。嗯,这很奇怪,因为我认为我早先使用quantmod下载了数据,但是我做了很多更改,以至于我忘记了历史文件中的那一部分。虽然这解释了错误,但我会再试一次,确保我有一个xts对象。 - Milktrader
1
好消息,我成功找到了我的.Rhistory文件,并保存了我开始解决这个问题的过程。我使用getSymbols("^GSPC")获取数据。我将其分配给了一个名为SPX的对象,此时它是一个xts对象。但是,当我对该对象使用transform()函数进行操作时,它变成了一个普通的vanilla data.frame对象,这就是为什么我在diff()函数中出现错误的原因。现在一切都好了。谢谢Josh,并欢迎来到stackoverflow。 - Milktrader

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接