【问题标题】:String matching on two columns in [R][R] 中两列的字符串匹配
【发布时间】:2013-05-29 15:46:32
【问题描述】:

我正在寻找匹配多个字符串条件,然后使用 grepl 查找 R 中的行子集来查找匹配项。我从another post 找到了一个很好的解决方案,其中使用了一些特定的代码(但你明白了):subset(GEMA_EO5, grepl(paste(l, collapse="|"),GEMA_EO5$RefSeq_ID))

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

例如:3 列,a b 和 c。尽管(3,b)中的格式为“T I”,但我希望选择 T(第 3 行和第 4 行)这样的标准。它应该同时识别 (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

【问题讨论】:

  • 听起来您可以只使用| 将多次调用的结果组合到grepl。或者融化您的数据框并进行一次扫描。你有更具体的例子吗?
  • 您也可以将列粘贴在一起。
  • @Peyton 我已经编辑了帖子以包含一个示例
  • 所以,为了清楚起见,这个问题与字符串匹配无关?可能值得更改标题。还有标签。
  • 是的,如果您只是处理数字,则不需要grep

标签: string r string-matching


【解决方案1】:

这里有一些演示数据来展示它是如何工作的:

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

【讨论】:

  • 谢谢,如果我使用dat[with(dat,grepl(paste(l,collapse="|"),df$c | grepl(paste(l,collapse="|"),df$b)),] 来说明字符串间距,这可行
  • 其中 l 是要匹配的字符串标准列表,如问题中的链接帖子中所示
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-29
  • 1970-01-01
  • 1970-01-01
  • 2010-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多