Как заменить слово другим, используя оператор if и str_replace в r - PullRequest
0 голосов
/ 03 марта 2020

Я использую набор данных со строковыми символами, который содержит некоторые неправильные переводы. В одном столбце отображаются слова на языке оригинала («name.french»). В следующем столбце перечислены их переводы («name.engli sh»). Теперь я хочу использовать следующую команду для замены неправильных переводов на правильные:

if(name.french == "framboise"){name.english = str_replace(name.english, "rasperry", "rasberry");}

Однако я всегда получаю следующее сообщение об ошибке: Аргумент не может интерпретироваться как логическое значение. Есть ли другой способ заменить некоторые неправильные переводы?

Ответы [ 3 ]

3 голосов
/ 03 марта 2020

Используйте ifelse. Предполагая, что ваш data.frame называется df, и вы хотите внести изменения в столбец name.engli sh:

df$name.english = ifelse(name.french == 'framboise', str_replace(name.english, "rasperry", "rasberry"), df$name.english)
2 голосов
/ 03 марта 2020

Если ваши данные хранятся в двух отдельных векторах, вы можете использовать ifelse:

name.french <- c("framboise", "not framboise")
name.english <- c("rasperry", "rasperry")


name.english2 <-
  ifelse(
    name.french == "framboise",
    str_replace(name.english, "rasperry", "rasberry"),
    name.english
  )

Это также работает, если ваши данные хранятся в tibble или data.frame, и вы хотите используйте tidyverse глаголы:

library(tidyverse)

d <- tibble(name.french = c("framboise", "not framboise"),
            name.english = c("rasperry", "rasperry"))

d2 <- d %>%
  mutate(name.english = ifelse(
    name.french == "framboise",
    str_replace(name.english, "rasperry", "rasberry"),
    name.english
  ))

d
#> # A tibble: 2 x 2
#>   name.french   name.english
#>   <chr>         <chr>       
#> 1 framboise     rasperry    
#> 2 not framboise rasperry

d2
#> # A tibble: 2 x 2
#>   name.french   name.english
#>   <chr>         <chr>       
#> 1 framboise     rasberry    
#> 2 not framboise rasperry

Создано в 2020-03-03 пакетом Представить (v0.3.0)

0 голосов
/ 03 марта 2020

Как насчет старого доброго gsub(...) ie решения на основе regex для ваших гипотетических данных. Frame df.

df[df[["name.french"]] == "framboise", "name.english"] <- gsub( pattern = "rasperry", replacement = "rasberry", x = df[df[[name.french == "framboise"]], "name.english"] ) 

Конечно, вы можете легко встроить это в простую функцию, где имя столбца здесь: "name.french", критерии фильтра строки здесь: "framboise" и строки шаблона и замены можно передать в качестве параметров. В случае, если вы просто хотите глобально заменить «rasperry» на «rasberry» во всех name.english, вы можете удалить фильтр строк в df ie части df[["name.french"]] == "framboise", ... кода.

...