Я думаю, что case_when
будет работать, хотя, как прокомментировал @akrun, решение data.table
может быть быстрее, если вам нужна скорость.
df %>%
mutate(action2 = case_when(
grepl("AA.*C|C.*AA", action) ~ "AsC",
grepl("A[A1]", action) ~ "As",
grepl("BB", action) ~ "Bs",
TRUE ~ action)
)
# user action action2
# 1 1 AA As
# 2 1 BB Bs
# 3 1 ABCFF ABCFF
# 4 1 A1B As
# 5 2 AAB As
# 6 2 BA1 As
# 7 2 AABC AsC
# 8 3 M M
(для того, чтобы это работало как есть Я преобразовал ваше текущее значение action
в character
из фактора. Поскольку ваши данные являются просто игрушкой / образцом, это может не быть фактором для ваших реальных данных.)