如何用data.table实现类似dplyr::filter的文本模糊过滤?
在data.table中实现模糊文本过滤
完全可以用data.table实现和dplyr::filter(grepl(...))一致的模糊匹配效果,直接在data.table的筛选位(i参数位置)使用grepl()函数即可,逻辑和dplyr里的写法完全对应。
示例代码
# 原始数据 df <- data.frame (first = c("value_1 and value_2", "value_2", "value_1", "value_1"), second = c(1, 2, 3, 4)) # data.table实现模糊匹配过滤 library(data.table) dt.output <- setDT(df)[grepl("value_1", first)] # 对比dplyr的结果 filter.output <- dplyr::filter(df, grepl("value_1", first)) # 验证结果一致 all.equal(dt.output, filter.output)
关键说明
%in%是精确匹配,只会筛选出first列完全等于"value_1"的行;grepl()是模式匹配(默认支持正则表达式),会筛选出first列包含"value_1"子串的所有行,这和dplyr里的写法逻辑完全一致;- data.table的筛选语法
dt[条件]中,条件的写法和base R/dplyr的逻辑兼容,直接用grepl()就能实现模糊匹配。
内容的提问来源于stack exchange,提问作者steveneven
相关产品推荐
相关产品推荐

