Мы можем использовать базу R ave
, чтобы соответствовать максимальному значению в каждой группе
df$C <- +(with(df, B == ave(B, A, FUN = max)))
df
# A B C
#1 1 1 0
#2 1 9 1
#3 2 5 0
#4 2 10 0
#5 2 15 1
#6 3 1 0
#7 3 2 1
#8 4 5 0
#9 4 6 1
То же самое в dplyr
будет
library(dplyr)
df %>%
group_by(A) %>%
mutate(C = +(B == max(B)))
Мы также можемсопоставьте его с индексом максимального значения
df$C <- with(df, ave(B, A, FUN = function(x) seq_along(x) == which.max(x)))
и
df %>%
group_by(A) %>%
mutate(C = +(row_number() == which.max(B)))