代码之家  ›  专栏  ›  技术社区  ›  antonoyaro8

数据帧中每列上的Grepl

  •  0
  • antonoyaro8  · 技术社区  · 1 年前

    我在R中有一个数据帧:

    col1 = c("abc", "cbe", "ddd")
    col2 = c("hbc", "lbc","uhr")
    id = c(1,2,3)
    
    example = data.frame(id, col1, col2)
    

    我想选择任何列中包含“bc”的所有行。这看起来像这样:

     id col1 col2
    1  1  abc  hbc
    2  2  cbe  lbc
    

    # almost works
    select_col_1 = example[grepl("bc", example$col1, ignore.case = TRUE)]
    
    • 但是,有没有一种方法可以对数据帧中的每一列重复此操作?

    我试图用“lapply”的说法来做到这一点:

    lapply(example, function(x){x[grepl('bc', example, ignore.case = TRUE)])
    

    有人能告诉我怎么做吗?

    1 回复  |  直到 1 年前
        1
  •  2
  •   neilfws    1 年前

    您可以使用 dplyr 提供的包装 filter() everything() 选择所有列和 if_any() 对于任何列中的结果。

    library(dplyr)
    example %>% 
      filter(if_any(everything(), ~ grepl("bc", .)))
    

      id col1 col2
    1  1  abc  hbc
    2  2  cbe  lbc
    
        2
  •  0
  •   Quinten    1 年前

    如果你想使用 lapply ,您可以使用以下代码:

    col1 = c("abc", "cbe", "ddd")
    col2 = c("hbc", "lbc","uhr")
    id = c(1,2,3)
    
    example = data.frame(id, col1, col2)
    
    example[Reduce(`|`, lapply(example[-1], grepl, pattern="bc")),]
    #>   id col1 col2
    #> 1  1  abc  hbc
    #> 2  2  cbe  lbc
    

    reprex package