向下填充常量值,dplyr中满足条件时加1

Fill down constant value, add 1 when condition is met in dplyr

我有一个数据框如下:

step   state   
1      active
2      active
       break
1      active
2      error
3      active
       break
1      active

我想创建一个新列,在其中填充常量值 1,然后在每次到达“中断”行时向常量填充添加 1,这将使数据框看起来像。

step   state     n
1      active    1
2      active    1
       break     2
1      active    2
2      error     2
3      active    2
       break     3
1      active    3

任何使用 dplyr 或 base r 的解决方案都会有所帮助。谢谢

我们可以将 cumsum%in%mutate 一起使用。

library(dplyr)

dat2 <- dat %>%
  mutate(n = cumsum(state %in% "break") + 1)
dat2
#   step  state n
# 1    1 active 1
# 2    2 active 1
# 3    2  break 2
# 4    1 active 2
# 5    2  error 2
# 6    3 active 2
# 7    3  break 3
# 8    1 active 3

数据

dat <- read.table(text = "step   state   
1      active
2      active
2       break
1      active
2      error
3      active
3       break
1      active",
                  header = TRUE)