我具有与以下类似的数据集:
A B C
1 10 5
1 20 1
2 30 1
2 30 1
我想添加一个返回1的列,直到我们遇到A和B的副本时,当我需要返回0时(但仅适用于第二个实例),所以:
A B C D
1 10 5 1
1 20 1 1
2 30 1 1
2 30 1 0
任何帮助表示赞赏。
答案 0 :(得分:3)
一个选项是
df$D <- as.integer(!duplicated(df[c("A", "B)]))
df$D
#[1] 1 1 1 0
答案 1 :(得分:1)
只是带有check_ctlspec -p "AF (state=d -> AX state=a)"
的涂鸦:
library(dplyr)
或者如果您希望它为零“仅用于第二个实例” ,这意味着第三个实例也将是一个,则可以进行以下操作:
df %>% group_by(A,B) %>% mutate(D = +((1:n())==1))
在该示例中,您的重复项不仅适用于df %>% group_by(A,B) %>% mutate(D = +!((1:n())==2))
和A
,还适用于B
。如果确实如此,则可以使用C
代替group_by_all
。