根据MULTIPLE正则表达式匹配

时间:2015-12-23 16:11:50

标签: r data.table

我正在尝试实现与this question中解决的目标相同的目标,但我希望通过两个 grep语句来过滤表。当我尝试这个时:

DT[grep("word1", column) | grep("word2", column)]

我收到此错误:

Warning message:
In grep("word1", column) | grep("word2", column) :
longer object length is not a multiple of shorter object length

当我尝试将此逻辑与data.table的:=参数中的分配j结合使用时,我会遇到各种各样的怪异。基本上,OR运算符|显然不适用于data.table的grep参数中的i

我提出了一个混乱的解决方法:

DT.a <- DT[grep("word1", column)]
DT.b <- DT[grep("word2", column)]
DT.all <- rbind(DT.a,DT.b)

但我希望有更好的方法来实现这一目标。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

这里的问题结果是OR运算符|的位置中的函数选择和语法的组合。 DT[grep("word1", column) | grep("word2", column)]使data.table混淆,因为每个grep()都返回索引(整数)的向量,这些向量可以根据数据的不同而不同,并且data.table包不会被构建为处理这种输入。 grepl()是一个更合适的函数,因为它返回一个是否存在正则表达式匹配的布尔值,并且OR运算符|应该放在正则表达式模式字符串中。

解决方案:

DT[grepl("word1|word2", column)]