如何在字符串数据中grep两个单词?

时间:2015-06-18 18:24:12

标签: r

所以我有一个数据框,其中一列是字符类型,由字符串组成。我想找到那些“foo”和“bar”都出现的行,但是bar也可以在foo之前出现。基本上像正则表达式的AND运算符。我该怎么做?

2 个答案:

答案 0 :(得分:2)

您可以尝试

 rowIndx <- grepl('foo', df$yourcol) & grepl('bar', df$yourcol)

rowIndx返回逻辑TRUE/FALSE,可用于对col进行子集化。 (来自@Konrad Rudolph的评论)。如果您需要数字索引,只需用which包裹它,即which(rowIndx)

答案 1 :(得分:2)

正则表达式在逻辑运算中很糟糕。但是,您的特定情况可以通过以下表达式轻松实现:

(foo.*bar)|(bar.*foo)

然而,这是一个非常低效的正则表达式,我强烈建议不要使用它。在实践中,您将使用评论中的akrun解决方案:grep为它们单独设置并与结果相交(或者对结果进行逻辑grepl&,这在语义上是可交换的)。