如何使用 gsub() 部分匹配字符串的一部分并替换包含该部分匹配的所有字符串?



我试图在NBA投篮类型的一列中寻找"扣篮"这个词,因为有各种类型的扣篮。

然后将所有不同的扣篮类型替换为"扣篮"一词

nbaClean2 <- nbaData %>% 
select(x, y, points, type, result, team, player) %>% 
filter(team == 'LAL', y <= 47) %>% 
na_if("") %>% 
drop_na() %>% 
mutate(result = ifelse(result == 'missed', 'FGA', 'FGM')) %>% 
mutate(dunk = gsub('bdunk', 'dunk', type))
mutate(dunk = grepl('dunk', type), gsub('TRUE', 'dunk', dunk))

本质上是想看看我是否可以使用 gsub() 来部分匹配"灌篮"这个词。

试图找到一个解决方案,如果可能的话,我不必写下所有不同类型的镜头类型,因为有很多。

gsub只会替换匹配项。您可以通过将匹配项包装在.*中来使匹配匹配与完整字符串匹配,这会匹配任何内容。

mutate(dunk = gsub('.*dunk.*', 'dunk', type))

(注意我摆脱了你的b词边界。如果你想使用它,你需要一个双反斜杠".*\bdunk.*",但是你不会匹配任何在扣篮之前没有单词边界的东西,例如,"slamdunk"不会匹配。

一个可能更有效的选择是检测"dunk"模式,然后在没有正则表达式的情况下替换整个字符串,例如

mutate(dunk = ifelse(grepl("dunk", type, fixed = TRUE), "dunk", "not dunk"))

不清楚当type新创建的dunk列不包含"dunk"时,您希望在新创建的列中具有什么值。我会考虑简单地用dunk = grepl("dunk", type)使其成为逻辑列。如果您发布示例输入和所需的输出,则更容易提供帮助。也许你根本不想要dunk列,而只是如果type包含"扣篮"这个词,就把它改成"扣篮",就像这样:mutate(type = ifelse(grepl("dunk", type), "dunk", type))

相关内容

最新更新