我想得到使用的短手。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(`&`))