如何在 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
)
如果您的数据存储在 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
由 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", ...
部分代码。
我使用的数据集包含包含一些错误翻译的字符串字符。一列显示原始语言中的单词 ("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
)
如果您的数据存储在 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
由 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", ...
部分代码。