所以我有一个数据框,其中一列是字符类型,由字符串组成。我想找到那些“foo”和“bar”都出现的行,但是bar也可以在foo之前出现。基本上像正则表达式的AND运算符。我该怎么做?
答案 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
和&
,这在语义上是可交换的)。