[R] Dividing by 0
Jim Lemon
jim at bitwrit.com.au
Fri Jul 25 13:11:42 CEST 2008
On Thu, 2008-07-24 at 06:57 -0700, nmarti wrote:
> I'm trying to calculate the percent change for a time-series variable.
> Basically the first several observations often look like this,
>
> x <- c(100, 0, 0, 150, 130, 0, 0, 200, 0)
>
> and then later in the life of the variable they're are generally no more
> 0's. So when I try to calculate the percent change from one observation to
> the next, I end up with a lot of NA/Nan/INF, and sometimes 0's which is what
> I want, in the beginning.
>
> I know I can use x <- na.omit(x), and other forms of this, to get rid of
> some of these errors. But I would rather use some kind of function that
> would by defult give a 0 while dividing by zero so that I don't lose the
> observation, which is what happens when I use na.omit.
>
> I would imagine this is a common problem. I tried finding something in zoo,
> but I haven't found what I'm looking for.
>
Hi nmarti,
If you are looking for percent change, it is probably easiest to write a
little function that you can call for each pair of values. I'm assuming
that all of your values are >= 0.
pctchng<-function(x1,x2) {
# don't try to calculate the value
if(x1==0) {
# if the second value is zero, there is no change
if(x1==0) return(0)
# otherwise there is infinite change
# you may want to return another value here
else return(Inf)
}
# it's okay, calculate the percentage change
return(100*(x2-x1)/x1)
}
Jim
More information about the R-help
mailing list