如何返回包含字符列表中字符串的df行

时间:2017-12-09 21:28:12

标签: r

我有一个角色列表。我想在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行

提前感谢您的帮助。

2 个答案:

答案 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)]