I have df(A) (ncol=1,nrow=1356)
col1
5
7
9
3
2
3.8
24
2.7
12
11
23
.... to 1356 row...
i would like the sum from the first row to the fifth row, and after from the second row to the seventh row, and so on. Furthermore each value is moltiplicate for a fraction of the number of row. The expected results is, for example:
5*1/5 + 7*2/5 + 9*3/5 + 3*4/5 + 2*5/5= (result)
7*1/5 + 9*2/5 + 3*3/5 + 2*4/5 + 3.8*5/5= (result)
9*1/5 + 3*2/5 + 2*3/5 + 3.8*4/5 + 24*5/5= (result)
and so on for the 1356 row
In synthesis the sum is every 5 row, roll the data row by row.
Thank you in advance.
We could use shift
from data.table
library(data.table)
m1 <- na.omit(do.call(cbind, shift(df1$col1, 0:4, type="lead")))
rowSums(m1*(1:5)[col(m1)]/5)
#[1] 13.60 12.20 31.24 25.58 30.48 32.58 44.88
Or another option
m1 <- embed(df1$col1,5)
rowSums(m1*(5:1)[col(m1)]/5)
#[1] 13.60 12.20 31.24 25.58 30.48 32.58 44.88
I would use my favorite R function, filter
:
DF <- read.table(text = "col1
5
7
9
3
2
3.8
24
2.7
12
11
23", header = TRUE)
5*1/5 + 7*2/5 + 9*3/5 + 3*4/5 + 2*5/5
#[1] 13.6
7*1/5 + 9*2/5 + 3*3/5 + 2*4/5 + 3.8*5/5
#[1] 12.2
9*1/5 + 3*2/5 + 2*3/5 + 3.8*4/5 + 24*5/5
#[1] 31.24
c(na.omit(stats::filter(DF$col1, (5:1)/5)))
#[1] 13.60 12.20 31.24 25.58 30.48 32.58 44.88