【问题标题】:How to filter data.table using grepl with multiple patterns on multiple columns in R如何使用 grepl 在 R 中的多个列上使用多个模式过滤 data.table
【发布时间】:2020-08-12 00:17:40
【问题描述】:

我在 R 中有一个 data.table,如下所示

col1 col2  col3
A     AA    1
C     BB   2

DT

我想过滤 data.table,使 col1 在 A/B/C 中,而 col2 在 AA/CC/ 中。如果我知道要搜索的列数是固定的,那么我可以这样做

DT[Vectorize(grepl)(col1, "A/B/C") & Vectorize(grepl)(col2, "AA/CC/")]
  • 如果要过滤的列数是动态的,我该如何过滤?
  • 有没有办法提高这个过滤器的速度?

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    您可以创建一个列名向量和您在这些列中查找的值列表,然后使用Map 选择行。

    library(data.table)
    
    cols <- paste0('col', 1:2)
    values <- list(c('A', 'B', 'C'), c('AA', 'CC'))
    DT[Reduce(`&`, Map(`%in%`, DT[, ..cols], values))]
    
    #   col1 col2 col3
    #1:    A   AA    1
    

    【讨论】:

      猜你喜欢
      • 2020-01-23
      • 2020-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-06
      • 1970-01-01
      • 2018-07-08
      相关资源
      最近更新 更多