【问题标题】:How to replace single words in language 1 by words in language 2 by using a separate dataframe that contains both languages?如何使用包含两种语言的单独数据框将语言 1 中的单个单词替换为语言 2 中的单词?
【发布时间】:2020-01-13 12:27:02
【问题描述】:

我有一个包含西班牙语单词的数据框,并想用他们的英文翻译替换它们。翻译保存在包含两个单词的单独字典数据框中。原始数据框中的单词可以以随机顺序出现多次。原始数据框中也可以有没有翻译的单词;它们应保持其原始形式。

来源

library(tidyverse)
df <- tibble(item = c("agua","guerra","pelea","hijo","grande","pelea","agua","guerra"))
dictionary <- tibble(word_ES=c("agua","guerra","pelea"), word_EN=c("water","war","fight"))

期望的结果

df2 <- tibble(item = c("water","war","fight","hijo","grande","fight","water","war"))

我对使用 tidyverse 包的建议特别感兴趣,但对其他解决方案也很满意。

【问题讨论】:

    标签: r replace character tidyverse


    【解决方案1】:

    一个选项是在data.table 中加入on

    library(data.table)
    setDT(df)[setDT(dictionary), item := word_EN, on = .(item = word_ES)]
    df
    #     item
    #1:  water
    #2:    war
    #3:  fight
    #4:   hijo
    #5: grande
    #6:  fight
    #7:  water
    #8:    war
    

    或者,如果我们更喜欢tidyverse,则输出left_joincoalesce

    library(tidyverse)
    df %>%
       left_join(dictionary, by = c('item' = 'word_ES')) %>% 
       transmute(item = coalesce(word_EN, item))
    

    【讨论】:

    • 第二种解决方案对我来说是完美的,并且完全符合我的要求。谢谢!
    【解决方案2】:

    这可以在tidyverse 中使用dplyrstringr 轻松完成。

    library(dplyr)
    library(stringr)
    
    df <- tibble(item = c("agua","guerra","pelea","hijo","grande","pelea","agua","guerra"))
    dictionary <- tibble(word_ES=c("agua","guerra","pelea"), word_EN=c("water","war","fight"))
    
    mutate(df, item = str_replace_all(item, setNames(dictionary$word_EN, dictionary$word_ES)))
    #> # A tibble: 8 x 1
    #>   item  
    #>   <chr> 
    #> 1 water 
    #> 2 war   
    #> 3 fight 
    #> 4 hijo  
    #> 5 grande
    #> 6 fight 
    #> 7 water 
    #> 8 war
    

    【讨论】:

    • 非常感谢!起初,这看起来很适合我的目的。唯一的问题是部分匹配出现问题。例如,如果您将“pelearse”(动词)添加到列表中,您的解决方案将返回“fightrse”(即,它将“pelea”替换为“fight”,但保留额外的位 pelea-“rse”)。
    猜你喜欢
    • 2020-02-17
    • 1970-01-01
    • 2021-06-29
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    相关资源
    最近更新 更多