基于字符串条件过滤行,dplyr过滤器,包含

Luc*_*ess 1 r contains filter dplyr

我想使用 dplyr contains() 和过滤器过滤数据帧。一定很简单吧?我见过的例子使用了基本的 R grepl ,它在某种程度上击败了对象。这是一个简单的数据框:

site_type <- c('Urban','Rural','Rural Background','Urban Background','Roadside','Kerbside')
df <- data.frame(row_id, site_type)
df <- as.tibble(df)
df
Run Code Online (Sandbox Code Playgroud)

现在我想按 site.type 包含字符串背景的所有行过滤数据框。如果我知道 site_type 的唯一值,我可以直接找到该字符串:

filtered_df <- filter(df, site_type == 'Urban Background')

但我想做一些类似的事情:

filtered_df <- filter(df, site_type(contains('background', match_case = False)))

有什么想法如何做到这一点吗?dplyr 助手contains只能用于列而不是行吗?

Sim*_*.A. 8

dplyr 中的函数contains是一个选择助手。它的目的是在使用该select函数时提供帮助,并且该select函数的重点是选择列而不是行。请参阅此处的文档。

filter是选择行的预期机制。您可能正在寻找的功能是grepl对文本进行模式匹配。

所以您正在寻找的解决方案可能是:

filtered_df <- filter(df, grepl("background", site_type, ignore.case = TRUE))
Run Code Online (Sandbox Code Playgroud)

我怀疑这主要是应用于列名称的contains包装器。grepl所以逻辑非常相似。

参考: