我正在使用类似于以下内容的数据框:
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”,这将是一个缓慢的过程。
让我们使用cumsum和mutate:
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)