[英]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
。 假設您的 data.frame 被稱為 df 並且您想對 name.english 列進行更改:
df$name.english = ifelse(name.french == 'framboise', str_replace(name.english, "rasperry", "rasberry"), df$name.english)
如果您的數據存儲在兩個單獨的向量中,您可以使用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 包(v0.3.0) 於 2020 年 3 月 3 日創建
好的舊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", ...
部分代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.