我使用包含字符串字符的数据集,其中包含一些错误的翻译。一栏显示原始语言的单词(“ 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(...)
,即假设数据regex
的基于df
的解决方案,情况如何?
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
中删除行过滤器。