После группировки по 'columna' мы можем replace
значения 'columnb', где количество отдельных элементов меньше 3 и равно от 'A' до 'T'
library(dplyr)
df1 %>%
group_by(columna) %>%
mutate(columnb = replace(columnb, n_distinct(columnb) <3 &
columnb =='A', 'T'))
# A tibble: 8 x 2
# Groups: columna [4]
# columna columnb
# <chr> <chr>
#1 Y123 B
#2 Y123 A
#3 Y123 T
#4 Y124 B
#5 Y124 A
#6 Y124 T
#7 Y125 T
#8 Y126 T
Если мы специально ищем 'B' и 'T'
df1 %>%
group_by(columna) %>%
mutate(columnb = replace(columnb, !any(c('B', 'T') %in% columnb)
& columnb == 'A', 'T'))
# A tibble: 8 x 2
# Groups: columna [4]
# columna columnb
# <chr> <chr>
#1 Y123 B
#2 Y123 A
#3 Y123 T
#4 Y124 B
#5 Y124 A
#6 Y124 T
#7 Y125 T
#8 Y126 T
data
df1 <- structure(list(columna = c("Y123", "Y123", "Y123", "Y124", "Y124",
"Y124", "Y125", "Y126"), columnb = c("B", "A", "T", "B", "A",
"T", "A", "A")), class = "data.frame", row.names = c(NA, -8L))