Calculating the percent change between two values in R and off by one issue

I am trying to calculate the percent change between two points in R in the form of:

(X_(i+1) - X_(i))/(X_(i))

Here is what I have come up with so far:

#x is a vector from the dataframe
#lag is distance between two points being compared
percent_change = function(x,lag = 1)
{
    n = length(x)
    pchange = c((x[(1+lag):n] - x[1:(n-lag)])/x[1:(n-lag)],NA)
    return(pchange)
}

However, in order to accomplish this task in R I had to bind an NA to avoid:

Error in \`$<-.data.frame\`(\`*tmp*\`, "Change", value = c(0.00248221082243916,  : 
  replacement has 4616 rows, data has 4617

With this addition, the operation occurs and aligns to what I've calculate it should be on paper.

Is there a way where I do not have to append an NA?

Answers


You do need the NA if you want to store the pc_change result back in the original data frame:

Since the last element of your array does not have an x+1 to compare to it will produce a vector 1 (or lag) shorter than the original.


Warning: Note that you have one NA added - this is correct for the case lag=1 but more generally you need need lag × NA elements.

Try replacing NA with rep(NA,lag).


Here's a more compact version of your function using the built-in diff function:

pcchange=function(x,lag=1) c(diff(x,lag),rep(NA,lag))/x

Need Your Help

How would you open a Dialog when an edit box is selected? MFC 2005

mfc dialog keyboard editbox

I would like to be able to create an onscreen keyboard to popup whenever an edit field is selected. I am using MFC Visual studio 2005 (C++ based).

Why encapsulate this field?

c# oop coding-style standards encapsulation

I've always been told to encapsulate ANY and ALL properties from a class...

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.