Using 'window' functions in dplyr

dplyr, r

Solution

`dlpyr`-only solution:

d %>% 
  group_by(i=cumsum(trial %in% c('A','B'))) %>% 
  mutate(cond=trial[1],num=seq(n())-1) %>% 
  ungroup() %>% 
  select(-i)

#    trial cond num
# 1      A    A   0
# 2      a    A   1
# 3      b    A   2
# 4      B    B   0
# 5      x    B   1
# 6      y    B   2
# 7      A    A   0
# 8      a    A   1
# 9      b    A   2
# 10     B    B   0
# 11     x    B   1
# 12     y    B   2

Problem

I need to process rows of a data-frame in order, but need to look-back for certain rows. Here is an approximate example: ``` library(dplyr) d <- data_frame(trial = rep(c("A","a","b","B","x","y"),2)) d <- d %>% mutate(cond = rep('', n()), num = as.integer(rep(0,n()))) for (i in 1:nrow(d)){ if(d$trial[i] == "A"){ d$num[i] <- 0 d$cond[i] <- "A" } else if(d$trial[i] == "B"){ d$num[i] <- 0 d$cond[i] <- "B" } else{ d$num[i] <- d$num[i-1] +1 d$cond[i] <- d$cond[i-1] } } ``` The resulting data-frame looks like ``` > d Source: local data frame [12 x 3] trial cond num 1 A A 0 2 a A 1 3 b A 2 4 B B 0 5 x B 1 6 y B 2 7 A A 0 8 a A 1 9 b A 2 10 B B 0 11 x B 1 12 y B 2 ``` What is the proper way of doing this using `dplyr`?

Original source