r - 在 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 中的哪个任期即将到来。我不希望该函数替换不完整的匹配项(即,将“The ELDERSCROLLS V: SKYRIM”转换为 THE ELDERSCOLLS V: THE ELDER SCROLL 5: Skyrim”)将模式放入pattern = c("1", "2")
其中根本不起作用,因为它只能按顺序检查模式。
我还尝试了 DataCombine 包中的 FindReplace 函数,但由于我不太理解的原因(声称我缺少维度并且向量不是字符向量),该函数似乎也不起作用。无论如何,我想使用尽可能少的包,并且更愿意留在 tidyverse 中。
有人有好的解决方案吗?我不想单独搜索每个术语,因为我必须经常这样做,而且我已经必须为 6 列执行此操作,因为 mutate_at doesn_t 似乎可以与 str_replace 一起使用。
谢谢!
解决方案
一个方便的解决方案是只使用“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)
推荐阅读
- java - Spring OAuth2 XML 配置仍然给出有关重定向和匿名访问的错误
- reactjs - axios 的返回值不是从缓存中获取的
- junit - 如果存在于多个方法中,如何模拟局部变量
- python - 在数据框底部创建行,计算出现次数
- c# - 实例化 EF Core DbContexts
- prestashop-1.7 - 我正在使用 prestashop 1.7.5.2 一些客户想要从他们的商店中删除他们只想使用购物车功能的付款选项
- python - 为什么 scipy.optimize 参数上的误差线会超出范围
- vue.js - v-选择多个未设置值
- r - 未来的系统命令/Rshiny 中的承诺
- mongodb - 是否可以使用颤振飞镖连接到本地 MongoDB?