以R中其他列中的值为条件创建序列

Gau*_*rav 2 r dplyr

我正在使用类似于以下内容的数据框:

 df = data.frame(ID1 = c(2,2,2,2,2,2,2), 
            ID2 = c(1,1,1,1,1,1,1),
            flagTag = c(0,0,0,0,1,0,0))
Run Code Online (Sandbox Code Playgroud)

我需要创建一个新字段“ newField”,以便当ID1和ID2组中的flagTag = 1时值递增(因此,唯一记录由ID1和ID2的组合来标识)。结果表应该看起来类似

    ID1 ID2 flagTag newField
  1   2   1       0     1
  2   2   1       0     1
  3   2   1       0     1
  4   2   1       0     1
  5   2   1       1     2
  6   2   1       0     2
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用dplyr进行此操作,但无法提出进行此类操作的逻辑。一种方法是在数据帧中逐条记录并循环更新“ newField”,这将是一个缓慢的过程。

bou*_*all 5

让我们使用cumsummutate

library(dplyr)

df %>%
    group_by(ID1, ID2) %>%
    mutate(newField = 1 + cumsum(flagTag))


    ID1   ID2 flagTag newField
  <dbl> <dbl>   <dbl>    <dbl>
1     2     1       0        1
2     2     1       0        1
3     2     1       0        1
4     2     1       0        1
5     2     1       1        2
6     2     1       0        2
7     2     1       0        2
Run Code Online (Sandbox Code Playgroud)