我正在使用类似于以下的数据框:
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))
我需要创建一个新字段“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
我正在尝试使用 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
关于r - 根据 R 中其他列中的值创建一个序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42913912/