Несколько способов сделать это
library(dplyr)
df %>%
group_by(a) %>%
mutate(b = if_else(row_number() == n(), 1L ,b))
# a b
# <int> <dbl>
#1 5 0
#2 5 0
#3 5 1
#4 6 0
#5 6 1
То же, используя ave
with(df, ave(b, a, FUN = function(x) ifelse(seq_along(x) == length(x), 1, x)))
EDIT
В случае, если у вас есть столбцы в виде символов, нам нужно сначала преобразовать их в числовые и использовать if_else
df %>%
mutate_all(as.numeric) %>%
group_by(a) %>%
mutate(b = if_else(row_number() == n(), 1 ,b))
ИЛИ просто используйте ifelse
, так как это не зависит от строгой проверки типов
df %>%
group_by(a) %>%
mutate(b = ifelse(row_number() == n(), 1 ,b))