Вот решение base R
, которое предполагает, что у вас есть четко определенный набор Channel_group
значений
Данные:
data <- data.frame(Channel = c("Direct", "Paid social", "Organic social"),
stringsAsFactors = F)
Вы можете определить свои Channel_group
значения в vector a
:
a <- c("(S|s)ocial", "(D|d)irect")
Теперь вы используете sub
для замены значений Channel
на значения Channel_group
; \\U
гарантирует, что эти значения будут возвращены в виде строчных букв (используйте \\L
, если вы предпочитаете использовать строчные буквы):
data$Channel_group <- sub(paste0(".*\\b(", paste(a, collapse = "|"),")\\b.*"), "\\U\\1", data$Channel, perl = T)
Результат:
data
Channel Channel_group
1 Direct DIRECT
2 Paid social SOCIAL
3 Organic social SOCIAL