在R中:在列中搜索不同的字符串模式并替换所有字符串模式

问题描述

我有一列包含不同的游戏标题。为了收集它们,我必须将它们全部更改为单个拼写。 例如,我有

str_replace_all(FavouriteGames_DF$FavGame1,pattern = c("SKYRIM|
                                          THE ELDER SCROLLS V: SKYRIM|
                                          ELDER SCROLLS SKYRIM|
                                          ELDER SCROLLS V SKYRIM|
                                          SKYRIM (BETHESDA 2011)|
                                          SKYRIM (MODDED)|
                                          THE ELDERSCROLLS V: SKYRIM"),replacement = "THE ELDER SCROLLS 5: SKYRIM")

问题是,str_replace_all对此很不好,因为它不能仅搜索任何匹配的模式并将其替换为替换,但是显然必须按顺序进行,而且我无法预测其中的位置DataSet哪个术语将到达。 我不希望该功能替换不完整的匹配项(例如,将“ ELDERSCROLLS V:SKYRIM”转到“ ELDERSCOLLS V:ELDER SCROLL 5:天际”) 将模式放入pattern = c("1","2")中将完全无效,因为它只能按顺序检查模式。

我还尝试了DataCombine包中的FindReplace函数,但是由于我不太了解的原因(声称我缺少尺寸并且向量不是字符向量),该函数似乎也不起作用。无论如何,我想使用尽可能少的软件包,并且希望留在tidyverse中。

有人有好的解决方案吗?我不想自己搜索每个术语,因为我必须做很多事情,而且因为mutate_at did_t似乎可以与str_replace一起使用,所以我已经必须对6列进行搜索

谢谢!

解决方法

一个方便的解决方案是仅将“ SKYRIM”用作模式,因为它是您指定的所有模式上的通用词。您可以定义一个非常简单的函数来检查该模式,然后在要检查的特定列上使用lapply

check <- function(x){
    y <- unlist(strsplit(x," "))
    if("SKYRIM" %in% y)
        return("THE ELDER SCROLLS 5: SKYRIM")
    else
        return(x)
}

FavouriteGames_DF["FavGame1"] <- lapply(FavouriteGames_DF["FavGame1"],check)
,

我的评论为答案:

FavouriteGames_DF[FavouriteGames_Df$FavGame1 %in% pattern,]$FavGame1 <- replacement