我正在使用类似于以下内容的数据框:
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的组合识别)。结果表看起来应该类似< / p>
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”,这将是一个缓慢的过程。
答案 0 :(得分:4)
让我们使用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
答案 1 :(得分:1)
以下是ActiveSheet
选项base R
ave
或使用df$newField <- with(df, ave(flagTag, ID1, ID2, FUN = cumsum)+1)
df$newField
#[1] 1 1 1 1 2 2 2
data.table