簡體   English   中英

如何在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 假設您的 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
  )

這也適用,如果你的數據存儲在一個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 包(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM