Замена строки с использованием векторов - PullRequest
1 голос
/ 25 февраля 2020

Я пытаюсь перевести некоторые слова, встроенные в строки символов. Я хочу использовать таблицу «переводчик», в которой я настроил соответствие для соответствующего слова.

Вот некоторые похожие посты, но я не смог найти решение из них:

Ниже приведены некоторые данные для работы (mtcars - это набор данных, включенный в R) и фрагмент кода, который отражает проблему / вопрос.

library(tidyverse)

chr_strings = rownames(mtcars) # I want to replace strings within this object

# here is the "translator" table where it is possible to establish the links between strings
trans_df = data.frame(pat = c("Mazda", "Merc", "Toyota"),
                      rep = c("Mazda corp.", "Mercedes", "Toy."), # I have intentionally used different lengths
                      stringsAsFactors = F)

Цель состоит в том, чтобы заменить шаблоны, перечисленные в trans_df$pat в пределах chr_strings, на шаблоны, соответствующие строкам из rans_df$rep.

В основном я пробовал что-то для этой функции:

str_replace_all(string = chr_strings, pattern = trans_df$pat, replacement = trans_df$pat) # not working 

Это приводит к этой ошибке:

Warning message:
In stri_replace_all_regex(string, pattern, fix_replacement(replacement),  :
  longer object length is not a multiple of shorter object length

Возможно, неправильное использование функции str_replace_all ... Любой совет приветствуется!

1 Ответ

2 голосов
/ 25 февраля 2020

Вы можете сделать:

str_replace_all(chr_strings, setNames(trans_df$rep, trans_df$pat))

 [1] "Mazda corp. RX4"     "Mazda corp. RX4 Wag" "Datsun 710"          "Hornet 4 Drive"     
 [5] "Hornet Sportabout"   "Valiant"             "Duster 360"          "Mercedes 240D"      
 [9] "Mercedes 230"        "Mercedes 280"      
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...