2013-06-03 33 views
5

我正在寻找匹配多个字符串条件,然后在R中使用grepl找到匹配的子集。我已经找到了一个很好的解决方案,从another post在使用一些特定的代码(但你的想法):subset(GEMA_EO5, grepl(paste(l, collapse="|"),GEMA_EO5$RefSeq_ID))[R]中的两列上的字符串匹配

我在上面的例子中知道,而不是仅仅RefSeq_ID是否有可能在两列grepl。也就是说,通过其他方法在grepl中。换句话说,我想在l中寻找选项,不仅仅是一列,而是两个(或者多个)。这可能吗?

例如:3列,a b和c。我希望选择T(第3行和第4行),尽管(3,b)格式为“T I”。它应该识别(4,a)和(3,b),因此可以链接到上一个问题。我希望它在列a和列b中看,而不是一个或另一个。

a b  c 

    A A C P L 
    V V B W E E 
    W T I P J G 
    T W P J 
+0

听起来你可以用'|'将多个调用的结果合并到'grepl'中。或者融化你的数据框架,并且一扫而光。你有更具体的例子吗? – Peyton

+0

您也可以将这些列粘贴在一起。 – Peyton

+0

@Peyton我编辑过的帖子包含一个例子 – kirk

回答

6

下面是一些演示数据,以显示这是如何工作:

set.seed(1234) 
dat <- data.frame(A = sample(letters[1:3],10,TRUE), 
        B = sample(letters[1:3],10,TRUE)) 

使用[到子集,使这个在我看来,很多更清晰 - 我们可以使用grepl给基于一个逻辑向量匹配,并使用|来组合两个测试(在多列上)。如果你想在任一列中包含'a'的所有行的子集:

dat.a <- dat[with(dat, grepl("a", A)|grepl("a", B)),] 
    A B 
1 b a 
2 b a 
3 a c 
5 a a 
9 a a 
+1

谢谢,如果我使用'dat [with(dat,grepl(paste,l,collapse =“|”),df $ c | grepl(paste(l,collapse =“|”),df $ b) ),]'来说明字符串间距 – kirk

+0

,其中l是要在问题中链接的帖子中匹配的字符串标准的列表 – kirk

相关问题