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`?