我正在尝试实现与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)
但我希望有更好的方法来实现这一目标。有什么想法吗?
答案 0 :(得分:2)
这里的问题结果是OR运算符|
的位置中的函数选择和语法的组合。 DT[grep("word1", column) | grep("word2", column)]
使data.table混淆,因为每个grep()
都返回索引(整数)的向量,这些向量可以根据数据的不同而不同,并且data.table包不会被构建为处理这种输入。 grepl()
是一个更合适的函数,因为它返回一个是否存在正则表达式匹配的布尔值,并且OR运算符|
应该放在正则表达式模式字符串中。
解决方案:
DT[grepl("word1|word2", column)]