在dplyr中使用'window'函数

use*_*410 6 r dplyr

我需要按顺序处理数据帧的行,但需要回顾某些行.这是一个近似的例子:

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]
  }
}
Run Code Online (Sandbox Code Playgroud)

结果数据框看起来像

> 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
Run Code Online (Sandbox Code Playgroud)

使用这种方法的正确方法是什么dplyr

Mar*_*pov 6

dlpyr- 只有解决方案:

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
Run Code Online (Sandbox Code Playgroud)