根据另一列中的任何先前值更改列

Change on column based on any previous values in another column

我有一个这样的数据框:

foo <- c(rep(FALSE, 5), TRUE, rep(FALSE, 4))
rank_order <- seq(11,20)

df <- data.frame(rank_order = as.numeric(rank_order),
                 foo = foo)

我想做的是在 df$foo == TRUE 的行后面的 rank_order 的每个值上加一。这意味着 rank_order 应该是这样的:

rank_order_target <- c(11, 12, 13, 14, 15, 17, 18, 19, 20, 21)

更改 rank_order 的一个值很容易,lag 查看 foo 的一个先前值(如下所示),但我如何查看所有先前值foo?

df %>% 
  mutate(rank_order_new = case_when(lag(foo, default = FALSE) == TRUE ~ rank_order + 1,
                          TRUE ~ rank_order))
   rank_order   foo rank_order_new
1          11 FALSE             11
2          12 FALSE             12
3          13 FALSE             13
4          14 FALSE             14
5          15 FALSE             15
6          16  TRUE             16
7          17 FALSE             18
8          18 FALSE             18
9          19 FALSE             19
10         20 FALSE             20

base 解决方案或 tidyverse 的解决方案都会有所帮助。

我们可以使用cumsum

library(dplyr)
df %>%
     mutate(new = rank_order + cumsum(foo))