gpt4 book ai didi

从多个字符串的 grepl 匹配中返回匹配的字符串,而不是逻辑

转载 作者:行者123 更新时间:2023-12-05 00:49:03 28 4
gpt4 key购买 nike

目前我正在使用带有 grepl 的嵌套 ifelse 函数来检查与数据框中的字符串向量是否匹配,例如:

# vector of possible words to match
x <- c("Action", "Adventure", "Animation")

# data
my_text <- c("This one has Animation.", "This has none.", "Here is Adventure.")
my_text <- as.data.frame(my_text)

my_text$new_column <- ifelse (
grepl("Action", my_text$my_text) == TRUE,
"Action",
ifelse (
grepl("Adventure", my_text$my_text) == TRUE,
"Adventure",
ifelse (
grepl("Animation", my_text$my_text) == TRUE,
"Animation", NA)))

> my_text$new_column
[1] "Animation" NA "Adventure"

这仅适用于几个元素(例如,这里的三个),但是当可能的匹配更大(例如,150)时,我该如何返回?嵌套 ifelse 似乎很疯狂。我知道我可以像下面的代码一样一次 grepl 多个东西,但这会返回一个逻辑告诉我只有字符串是否匹配,而不是哪个匹配。我想知道匹配的是什么(如果是多个,任何匹配都可以。

x <- c("Action", "Adventure", "Animation")
my_text <- c("This one has Animation.", "This has none.", "Here is Adventure.")
grepl(paste(x, collapse = "|"), my_text)

returns: [1] TRUE FALSE TRUE
what i'd like it to return: "Animation" ""(or FALSE) "Adventure"

最佳答案

遵循模式here , base 解决方案。

x <- c("ActionABC", "AdventureDEF", "AnimationGHI")

regmatches(x, regexpr("(Action|Adventure|Animation)", x))

stringr 有一个更简单的方法来做到这一点

library(stringr)
str_extract(x, "(Action|Adventure|Animation)")

关于从多个字符串的 grepl 匹配中返回匹配的字符串,而不是逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46305236/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com