use*_*411 4 r stringr stringi tidyverse
我想使用filter()和str_detect()匹配多个模式来过滤数据帧,而不需要多个str_detect()函数调用.在下面的示例中,我想过滤数据框df以仅显示包含字母a f和的行o.
df <- data.frame(numbers = 1:52, letters = letters)
df %>%
filter(
str_detect(.$letters, "a")|
str_detect(.$letters, "f")|
str_detect(.$letters, "o")
)
# numbers letters
#1 1 a
#2 6 f
#3 15 o
#4 27 a
#5 32 f
#6 41 o
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方法
df %>%
filter(
str_detect(.$letters, c("a", "f", "o"))
)
# numbers letters
#1 1 a
#2 15 o
#3 32 f
Run Code Online (Sandbox Code Playgroud)
并收到以下错误
警告消息:在stri_detect_regex中(字符串,模式,opts_regex = opts(模式)):较长的对象长度不是较短对象长度的倍数
use*_*411 14
使用filter()和str_detect()完成此操作的正确语法将是
df %>%
filter(
str_detect(letters, "a|f|o")
)
# numbers letters
#1 1 a
#2 6 f
#3 15 o
#4 27 a
#5 32 f
#6 41 o
Run Code Online (Sandbox Code Playgroud)