在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对此有点糟糕,因为它不能只搜索任何匹配的模式并用替换来替换它,但显然必须按顺序遍历它,而且我无法预测哪个术语将到达数据集中的哪个位置。我不希望该函数替换不完全匹配(即,将"the ELDERSCROLLS V:SKYRIM"转为"the ELDER SCROLS V:the ELDER SCROLL 5:SKYRIM"(将模式放入pattern = c("1", "2")中根本不起作用,因为它只能按顺序检查模式。

我还尝试了DataCombine包中的FindReplace函数,但该函数似乎也不起作用,原因我不太理解(声称我缺少维度,矢量不是字符矢量(。不管怎样,我想尽可能少地使用包裹,我更喜欢呆在垃圾堆里。

有人有好的解决方案吗?我不想单独搜索每个术语,因为我必须做很多工作,而且我已经必须对6列进行搜索,因为mutate_at似乎不适用于str_replace。

谢谢!

我的评论作为答案:

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

一个方便的解决方案是只使用"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)

最新更新