Сначала давайте настроим это так, как вы описали:
library(tibble)
df <- tibble(text = c("2 Left Axillary Lymph Nodes Resection",
"cardyoohyper",
"Ablation Breast",
"Hypercarido",
"chordiohyper",
"Adenocarcinoma Of Colon (Radical Resection And Cr)",
"myocasta",
"hypermyopa"))
replace_dict <- tibble(pattern = list(c("kardio", "carido", "cardyo", "cordio", "chordio"),
"myoca",
"myopa",
"hyper"),
replacement = c("cardio",
"mioca",
"miopa",
"hiper"))
Я бы просто использовал stringi
для задачи, так как она имеет чрезвычайно эффективную версию gsub
, которая stri_replace_all_fixed
(примечаниечто вы также можете использовать версию регулярного выражения, которая немного медленнее, но работает так же). Он может обрабатывать несколько шаблонов и замен одновременно, поэтому все, что нам нужно сделать, это сначала развернуть столбец шаблона, а затем выполнить stringi
:
batch_replace <- function(text, replace_dict) {
replace_dict <- tidyr::unnest(replace_dict, pattern)
stringi::stri_replace_all_fixed(str = text,
pattern = replace_dict$pattern,
replacement = replace_dict$replacement,
vectorize_all = FALSE)
}
Давайте проверим эту функцию:
df$text_new <- batch_replace(df$text, replace_dict)
df
#> # A tibble: 8 x 2
#> text text_new
#> <chr> <chr>
#> 1 2 Left Axillary Lymph Nodes Resecti~ 2 Left Axillary Lymph Nodes Resecti~
#> 2 cardyoohyper cardioohiper
#> 3 Ablation Breast Ablation Breast
#> 4 Hypercarido Hypercardio
#> 5 chordiohyper cardiohiper
#> 6 Adenocarcinoma Of Colon (Radical Re~ Adenocarcinoma Of Colon (Radical Re~
#> 7 myocasta miocasta
#> 8 hypermyopa hipermiopa
Я думаю, это то, что вы хотели. Обратите внимание, что функция не очень гибкая, так как вы должны предоставить stri_replace_all_fixed
точно так, как показано. Поскольку вы не предоставили доступ к файлу, я не могу помочь вам с заполнением этой формы, поэтому вам нужно выяснить это или задать новый вопрос.