R diff () и 0 значений - PullRequest
       17

R diff () и 0 значений

1 голос
/ 08 февраля 2012

Я хочу использовать diff(log(myvar)) для вычисления некоторых результатов журнала временных рядов.Некоторые из значений в myvar установлены на 0, и diff() возвращает 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 ]

2 голосов
/ 08 февраля 2012

Вы также можете сделать это:

d[is.infinite(d)] <- 0
1 голос
/ 10 февраля 2012

Также следует добавить

d[is.nan(d)] = 0

для случая 0/0.

1 голос
/ 08 февраля 2012

Есть ли причина, что решение с костяной головкой

d <- diff(log(x))
d[abs(d)==Inf] <- 0

не работает? (Предполагая, что у вас есть только неконечные значения в ваших данных, я думаю, что единственный способ получить Inf или -Inf - это получить нулевое значение ...)

...