Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Adding NA's to a vector

Tags:

r

Let's say I have a vector of prices:

foo <- c(102.25,102.87,102.25,100.87,103.44,103.87,103.00)

I want to get the percent change from x periods ago and, say, store it into another vector that I'll call log_returns. I can't bind vectors foo and log_returns into a data.frame because the vectors are not the same length. So I want to be able to append NA's to log_returns so I can put them in a data.frame. I figured out one way to append an NA at the end of the vector:

log_returns <- append((diff(log(foo), lag = 1)),NA,after=length(foo)) 

But that only helps if I'm looking at percent change 1 period before. I'm looking for a way to fill in NA's no matter how many lags I throw in so that the percent change vector is equal in length to the foo vector

Any help would be much appreciated!

like image 813
huesecon Avatar asked Oct 21 '25 06:10

huesecon


1 Answers

You could use your own modification of diff:

mydiff <- function(data, diff){
  c(diff(data, lag = diff), rep(NA, diff))
}

mydiff(foo, 1)
[1]  0.62 -0.62 -1.38  2.57  0.43 -0.87    NA

data.frame(foo = foo,  diff = mydiff(foo, 3))

     foo  diff
1 102.25 -1.38
2 102.87  0.57
3 102.25  1.62
4 100.87  2.13
5 103.44    NA
6 103.87    NA
7 103.00    NA
like image 186
jeremycg Avatar answered Oct 23 '25 18:10

jeremycg