【问题标题】:data.table text filtering Rdata.table文本过滤R
【发布时间】:2022-12-08 01:54:26
【问题描述】:

我正在尝试过滤 data.table 的一些文本,寻找与 dplyr::filter 类似的方法(出于效率原因,我正在使用 data.table 方法)。

但是,data.table 中的过滤过程只返回找到完全匹配的字符串。相反, dplyr::filter 返回找到模式的行,而不仅仅是当它是精确模式时。

请参阅下面的示例。

df <- data.frame (first  = c("value_1 and value_2", "value_2", "value_1", "value_1"),
                  second = c(1, 2, 3, 4))

dt.output <- setDT(df)[first %in% c("value_1") ]
filter.output <- dplyr::filter(df, grepl("value_1", first))

dt.output 仅返回唯一包含 value_1 (3, 4) 的行。 filter.output 返回包含value_1 (1, 3, 4) 的行

是否可以使用 data.table 过滤文本,同时返回与 dplyr::filter 相同的结果?

df <- data.frame (first  = c("value_1 and value_2", "value_2", "value_1", "value_1"),
                  second = c(1, 2, 3, 4))

dt.output <- setDT(df)[first %in% c("value_1") ]
filter.output <- dplyr::filter(df, grepl("value_1", first))

【问题讨论】:

    标签: r text data.table


    【解决方案1】:

    此行为不是 dplyr::filter vs data.table。只是 %in% 正在寻找固定匹配,而 grepl 也为子字符串匹配返回 TRUE。如果我们在 data.table 中使用 grepl,它也能正常工作

    library(data.table)
    setDT(df)[grepl("value_1", first)]
                      first second
    1: value_1 and value_2      1
    2:             value_1      3
    3:             value_1      4
    

    或者也可以使用%like%

     setDT(df)[first %like% "value_1"]
                     first second
    1: value_1 and value_2      1
    2:             value_1      3
    3:             value_1      4
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-23
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-01
      • 2018-07-29
      相关资源
      最近更新 更多