Steph Locke explains some tricky behavior with window functions in R:
So looking at the code I wrote, you may have expected
c2
to holdNA, 3, 5, ...
where it’s taking the current value and the prior value to make a window of width 2. Another reasonable alternative is that you may have expectedc2
to holdNA, NA, 3, ...
where it’s summing up the prior two values. But hey, it’s kinda working likecumsum()
right so that’s ok! But wait, check outc3
. I gavec3
a window of width 3 and it gave meNA, 6, 9, ...
which looks like it’s summing the prior value, the current value, and the next value. …. That’s weird right?It turns out the default behaviour for these rolling calculations is to center align the window, which means the window sits over the current value and tries it’s best to fit over the prior and next values equally. In the case of us giving it an even number it decided to put the window over the next values more than the prior values.
Knowing your window is critical when using a window function, and knowing that some functions have different default windows than others helps you be prepared.