This is what am trying to do:
Time | value |
---|---|
00:00 | 12 |
00:01 | 6 |
00:02 | 8 |
00:03 | 12 |
00:04 | 11 |
00:05 | 6 |
00:06 | 13 |
00:07 | 12 |
00:08 | 12 |
and i want sample variance and result like:
Time | value | samp_vars |
---|---|---|
00:00 | 12 | NA |
00:01 | 6 | NA |
00:02 | 8 | 24.1666 |
00:03 | 12 | 12.8 |
00:04 | 11 | 6.8 |
00:05 | 6 | 3.0667 |
00:06 | 13 | 3.7 |
00:07 | 12 | 3.5833 |
00:08 | 12 | 0.333 |
I tried doing this:
df$samp_vars <- rollapply(df$value, list(c(-2,0,3)), var, fill = NA)
but my variance sample was not correct. I am not an expert in R so i will appreciate the help. Thanks!
CodePudding user response:
I make the expected values to be NA, NA, 8.166, 9.466, 7.466, 6.400, NA, NA, NA
— not as you have in the question. For example, at 00:02
var(c(12,6,8,12,11,6))
To get those values, simply alter your existing code to use a sequence of the right integers using :
— at the moment you are getting the variance at the current row, the row two steps back and the row three steps forward, not all in between.
zoo::rollapply(data$value, list(-2:3), var, fill = NA)
The -2:3
is making a vector of the integers c(-2, -1, 0, 1, 2, 3)
for you.