`data.table`全局搜索 - 在`any`列中过滤给定模式匹配的行

Dan*_*ian 7 regex grep r data.table

是否有任何已经存在的便利函数可以过滤data.table给定搜索模式中的行,查看所有列

names(DT)

[1] "Name" "LongName" "SomeOtherCol" "NumericCol" "bar" "foo"
Run Code Online (Sandbox Code Playgroud)

像这样的东西,适用于任意数量的列:

DT[Name %like% pattern | LongName %like% pattern | SomeOtherCol %like% pattern | bar %like% pattern | foo %like% pattern]
Run Code Online (Sandbox Code Playgroud)

Aru*_*run 6

一种方法是循环遍历列,应用正则表达式,这将返回逻辑data.table返回.您可以使用它rowSums来获取行.

dt <- data.table(a=c("Aa1","bb","1c"),b=c("A1","a1","1C"), c=letters[1:3])
# "a1" is the pattern to search for
ldt <- dt[, lapply(.SD, function(x) grepl("a1", x, perl=TRUE))] 
dt[rowSums(ldt)>0]
#      a  b c
# 1: Aa1 A1 a
# 2:  bb a1 b
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢@Arun.您是否合理地期望这种方法与方法相比更快,而我首先附加字符串以达到类似于'a%like%pattern |的表达式 b%喜欢%pattern | ...`(甚至直接使用`grepl`)然后`DT [eval(combined.expression)]`?我正准备建立这种方法,但我宁愿相信你对此的明智意见是否值得付出努力 (2认同)