在过滤器中使用str_detect和&的短手。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在过滤器中使用str_detect和&的短手。相关的知识,希望对你有一定的参考价值。

我想得到使用的短手。str_detect&filter 一个数据框架。

library(tidyverse)
df <- data.frame(type = c("age", "age and sex", "sex"))
#          type
# 1         age
# 2 age and sex
# 3         sex

我想缩短这个管道

df %>% 
  filter(str_detect(type, "age") & str_detect(type, "sex"))
#          type
# 1 age and sex 

所以我想把过滤器管到 map 在...上 pattern <- c("age", "sex") 也可能使用 reduce 某种程度上?

谅谅

答案

我们可以使用regex来指定0个或多个字符(*)后面的 "年龄 "和 "性别"。在 "性别 "之后的 \b 是为了指定词的边界,这样就不会与'谚语'等相匹配。

library(dplyr)
library(stringr)
df %>% 
   filter(str_detect(type, '\bage\b.*\bsex'))

或者使用 map/reduce

library(purrr)
df %>%
   filter(map(c('age', 'sex'), ~ str_detect(type, .x)) %>% reduce(`&`))

以上是关于在过滤器中使用str_detect和&的短手。的主要内容,如果未能解决你的问题,请参考以下文章

R语言stringr包str_detect函数检测字符串中模式存在与否实战

R - 为啥 str_detect 在以破折号结尾的“单词”上使用单词边界时返回与 grepl 不同的结果

php爆炸后的短字符串

php 带过滤产品的短代码

Android中的短到字节和字节到短的转换

Persistent Filters:使用 Or 时在过滤器中的操作