【问题标题】:Filter by multiple patterns with filter() and str_detect()使用 filter() 和 str_detect() 按多个模式过滤
【发布时间】:2017-11-29 06:17:06
【问题描述】:

我想过滤一个数据帧,使用 filter() 和 str_detect() 匹配多个模式,而不需要多个 str_detect() 函数调用。在下面的示例中,我想过滤数据框 df 以仅显示包含字母 a fo 的行。

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

我尝试了以下方法

df %>%
    filter(
        str_detect(.$letters, c("a", "f", "o"))
     )
#  numbers letters
#1       1       a
#2      15       o
#3      32       f

并收到以下错误

警告消息:在 stri_detect_regex(string, pattern, opts_regex = opts(pattern)) :较长的对象长度不是较短的倍数 物体长度

【问题讨论】:

    标签: r stringr tidyverse stringi


    【解决方案1】:

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

    【讨论】:

    • 已更正,谢谢。一直在学习。我一直在使用 case_when() 并感到困惑
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-23
    • 1970-01-01
    • 2019-08-23
    相关资源
    最近更新 更多