【问题标题】:Filter row based on a string condition, dplyr filter, contains [duplicate]根据字符串条件过滤行,dplyr 过滤器,包含 [重复]
【发布时间】:2021-01-27 03:22:47
【问题描述】:

我想使用 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

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

filtered_df &lt;- filter(df, site_type == 'Urban Background')

但我想做这样的事情:

filtered_df &lt;- filter(df, site_type(contains('background', match_case = False)))

任何想法如何做到这一点? dplyr helper contains 只能用于列而不是行吗?

【问题讨论】:

  • 误删df中的row_id,row_id = c(id1, id2, id3 ...) 你看图:-)

标签: r filter dplyr contains


【解决方案1】:

dplyr 中的contains 函数是一个选择助手。它的目的是在使用 select 函数时提供帮助,select 函数专注于选择列而不是行。请参阅文档here

filter 是用于选择行的预期机制。您可能正在寻找的函数是 grepl,它对文本进行模式匹配。

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

filtered_df <- filter(df, grepl("background", site_type, ignore.case = TRUE))

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

参考资料:

【讨论】:

  • 感谢您的回答 - 这正是我所担心的,有点令人失望(抱歉 dplyr),但非常感谢您帮助我!
猜你喜欢
  • 2022-01-19
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 2018-01-25
  • 2018-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多