[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