JerryWho - 1 year ago 179
R Question

# rollmean with dplyr and magrittr

Given the following data:

``````    set.seed(1)
data <- data.frame(o=c('a','a','a','a','b','b','b','b','c','c','c','c'), t=c(1,2,3,4,1,2,3,4,1,2,3,4), u=runif(12), v=runif(12))
data
o t          u         v
1  a 1 0.26550866 0.6870228
2  a 2 0.37212390 0.3841037
3  a 3 0.57285336 0.7698414
4  a 4 0.90820779 0.4976992
5  b 1 0.20168193 0.7176185
6  b 2 0.89838968 0.9919061
7  b 3 0.94467527 0.3800352
8  b 4 0.66079779 0.7774452
9  c 1 0.62911404 0.9347052
10 c 2 0.06178627 0.2121425
11 c 3 0.20597457 0.6516738
12 c 4 0.17655675 0.1255551
``````

I want to calculate the rolling mean (package zoo) of u per group defined by the coloumn o. The order for the rolling mean is set by t. The rolling mean should be added as a new column to the data.frame.

I want to use magrittr and dplyr. I tried

``````    data %>%
group_by(o) %>%
sort(t) %>%
select(u) %>%
rollmean(3) %>%
rbind
``````

But this won't work. Is it possible to do it with magrittr and dplyr or do I have to do it step by step?
The values of o and t are variable in my real data.

How do I fill the first two rows?

Answer Source

May be this helps:

``````library(dplyr)
data %>%
group_by(o) %>%
mutate(rM=rollmean(u,3, na.pad=TRUE, align="right"))
``````

If you want to do for both columns, `u` and `v`

``````fun1 <- function(x) rollmean(x, 3, na.pad=TRUE, align="right")
data %>%
group_by(o) %>%
mutate_each(funs(fun1), u, v)
``````
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download