我试图在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))
。