Search code examples
rreturntime-seriesfinance

How do I calculate overlapping three-day log returns in the same dataframe in R?


I've just started learning R. As for now, I have prices PRC in a dataframe test together with the date and several other variables.

My goal is to calculate the following within the same dataframe so I can maintain the connection to the date.
1. Overlapping three-day log returns
2. One-day log returns

Through other posts I came up with the following code for the three day lag returns and the one-day lag returns respectively, but I am still unsure on how to incorporate it into my dataframe:

test$logR3 <- diff(log(test$PRC)), lag=3)

This code currently doesn't work due to the difference in number of rows. How do I take this into account? Can I somehow put zeros or NAs in order to fill the missing rows?

Thank you in advance.


Solution

  • maybe something like:

    days=c()
    for(i in seq(3,nrow(test),3)){  #loop through it in steps of 3
        one_day_ago_diff=log(test$PRC[i])-log(test$PRC[i-1]) #difference between today and yesterday
        three_days_ago_diff=log(test$PRC[i])-log(test$PRC[i-3]) #difference between today and three days ago
        days=c(days,c(three_days_ago_diff,NA,one_day_ago_diff)) # fills empty vector with diff from 3 days ago- followed by NA to skip 2 days ago and then one day ago
    }
    
    if(length(days)<nrow(test)){days=c(days, rep(NA,nrow(test)-length(days)))} #check they're the same length
    test$lags=days #add column to test