如何在 r 中使用 if 语句和 str_replace 将一个词替换为另一个词

How to replace a word by another using if statement and str_replace in r

我使用的数据集包含包含一些错误翻译的字符串字符。一列显示原始语言中的单词 ("name.french")。在下一栏中列出了他们的翻译 ("name.english")。现在我想使用以下命令将错误的翻译替换为正确的翻译:

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

但是,我总是收到以下错误消息:参数不能解释为逻辑值。有没有其他方法可以替换一些错误的翻译?

如果您的数据存储在两个单独的向量中,您可以使用 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
  )

如果您的数据存储在 tibbledata.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

reprex package (v0.3.0)

于 2020-03-03 创建

使用ifelse。假设您的 data.frame 被称为 df 并且您想更改 name.english 列:

df$name.english = ifelse(name.french == 'framboise', str_replace(name.english, "rasperry", "rasberry"), df$name.english)

旧的 gsub(...) 怎么样,即针对您的假设 data.frame df 的基于 regex 的解决方案。

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

当然,您可以轻松地将其构建到一个简单的函数中,其中列名在这里:"name.french",行过滤条件在这里:"framboise",模式和替换字符串可以传递给作为参数。如果您只想在所有 name.english 中将 "rasperry" 全局替换为 "rasberry",那么您可以在 df 中删除行过滤器,即 df[["name.french"]] == "framboise", ... 部分代码。