我有一个角色列表。我想在df中返回包含给定列中列表中任何字符串的行。
我尝试过这样的事情:
hits <- df %>%
filter(column, any(strings))
strings <- c("ape", "bat", "cat")
head(df$column)
[1] "ape and some other text here"
[2] "just some random text"
[3] "Something about cats"
我想只返回第1行和第3行
提前感谢您的帮助。
答案 0 :(得分:1)
将grepl()
与正则表达式匹配,以匹配strings
向量中的任何字符串:
strings <- c("ape", "bat", "cat")
首先,您可以将strings
向量折叠到您需要的正则表达式:
regex <- paste(strings, collapse = "|")
给出了:
> regex <- paste(strings, collapse = "|")
> regex
[1] "ape|bat|cat"
管道符号|
充当或运算符,因此此正则表达式ape|bat|cat
将匹配ape
或 {{1 } 或 bat
。
如果您的data.frame cat
如下所示:
df
然后,您可以运行以下代码行,只返回与所需字符串匹配的行:
> df
# A tibble: 3 x 1
column
<chr>
1 ape and some other text here
2 just some random text
3 something about cats
输出如下:
df[grepl(regex, df$column), ]
请注意,上面的示例不区分大小写,它只会与指定的小写字符串完全匹配。您可以使用> df[grepl(regex, df$column), ]
# A tibble: 2 x 1
column
<chr>
1 ape and some other text here
2 something about cats
的{{1}}参数轻松克服此问题(请注意大写ignore.case
):
grepl()
答案 1 :(得分:0)
这可以通过正则表达式完成。
aColumn <- c("ape and some other text here","just some random text","Something about cats")
aColumn[grepl("ape|bat|cat",aColumn)]
...和输出:
> aColumn[grepl("ape|bat|cat",aColumn)]
[1] "ape and some other text here" "Something about cats"
>
一个也在R对象中设置正则表达式,如下所示。
# use with a variable
strings <- "ape|cat|bat"
aColumn[grepl(strings,aColumn)]