Jaroslav Kotrba
Jaroslav Kotrba

Reputation: 313

Cumsum function step wise in R

I am facing one problem, I calculated a monthly interest rate for a mortgage, however, I would need to sum the results in order to have it yearly (always 12 months).

H <- 2000000 # mortgage
i.m <- 0.03/12 # rate per month
year <- 15 # years

a <- (H*i.m*(1+i.m)^(12*year))/
  ((1+i.m)^(12*year)-1)
a # monthly payment

interest <- a*(1-(1/(1+i.m)^(0:(year*12))))
interest

cumsum(a*(1-(1/(1+i.m)^(0:(year*12))))) # first 12 values together and then next 12 values + first values and ... (I want to have for every year a value)


Upvotes: 1

Views: 144

Answers (2)

Anoushiravan R
Anoushiravan R

Reputation: 21908

I think you can use the following solution:

monthly <- cumsum(a*(1-(1/(1+i.m)^(0:(year*12)))))

sapply(split(monthly, ceiling(seq_along(monthly) / 12)), function(x) x[length(x)])

         1          2          3          4          5          6          7          8 
  2254.446   9334.668  21098.218  37406.855  58126.414  83126.695 112281.337 145467.712 
         9         10         11         12         13         14         15         16 
182566.812 223463.138 268044.605 316202.434 367831.057 422828.023 481093.905 486093.905 

Upvotes: 2

Ronak Shah
Ronak Shah

Reputation: 388982

You may do this with tapply in base R.

monthly <- cumsum(a*(1-(1/(1+i.m)^(0:(year*12)))))
yearly <- tapply(monthly, ceiling(seq_along(monthly)/12), sum)

Upvotes: 2

Related Questions