R diff()和0值

时间:2012-02-07 22:03:49

标签: r diff

我想使用diff(log(myvar))来计算一些时间序列日志返回值。在这种情况下,myvar中的某些值设置为0diff()会返回Inf,因为它应该是数学上的。

当滞后对的任一数据点为diff()时,如何强制0发出异常并返回0?例如

diff(log(c(0,1,2,3,4)))

会返回

0 0.6931472 0.4054651 0.2876821

强制第一个计算值为0而不是Inf

更新 我使用is.infinite()实际上遇到了问题。考虑以下情况:

> v = diff(log(c(1, 0, 0, 2, 3)))
> v 
[1]      -Inf       NaN       Inf 0.4054651
> is.infinite(v) 
[1]  TRUE FALSE  TRUE FALSE

这里我们有3种不同的情况,-Inf,Inf和NaN。目标是将0设置为基本报价为0的所有回报,因此我必须添加v[is.nan(v)] = 0

为什么我要将返回值设置为0而不是NA?嗯,这更像是一个逻辑问题,而不是一个编程问题,但我的理由是,在我的情况下,0意味着参考价格没有改变(而不是它未知)。

3 个答案:

答案 0 :(得分:2)

你也可以这样做:

d[is.infinite(d)] <- 0

答案 1 :(得分:1)

的愚蠢解决方案是否有原因?
d <- diff(log(x))
d[abs(d)==Inf] <- 0

不起作用? (假设您的数据中只有非限定值,我认为获得Inf-Inf的唯一方法是获得零值...)

答案 2 :(得分:1)

还应该添加

d[is.nan(d)] = 0

对于0/0案例。