R中的循环匹配函数

时间:2015-02-05 02:02:26

标签: r grep match

我有两个数据框,一个是疾病x中涉及的已知基因列表,另一个是阵列数据。 两个数据帧的简单示例是:

knownGene <- as.dataframe(geneID = c(gene1, gene2, gene3, gene5, gene5), chr = c(16,3,4,1,10))

arrayData <- as.dataframe(sampleID = c(xyz1,xyz1,xyz1,xyz2,xyz2,xyz2,xyz2), geneID = c(gene1, gene3, gene4, gene2, gene1, gene3, gene4, gene5)

阵列数据可能具有多次列出的基因(例如,多个样品可能在同一基因中具有变异)。因此做匹配

Matched<-arrayData[na.omit(match(knownGene$geneID, arrayData$geneID)),]

只会产生第一个匹配,例如每个基因最多只能抽出一个样本。 如果我在循环中使用grep,由于grep拉出包含x个字符的术语,我得到了许多不在我的knownGene中的基因。 我的循环看起来像这样

for (i in 1:length(knownGene$geneID)){
  x<-arrayData[grep(knownGene[i,2],arrayData$geneID),]
    df<-rbind(df,x)
}

有没有办法在循环中使用这样的匹配(到目前为止我的所有尝试都失败了)。或者能够在循环中grep精确的术语,我知道如果提供了字符串,你可以grep确切的术语。

1 个答案:

答案 0 :(得分:0)

我想你想要:

arrayData[arrayData$geneID %in% knownGene$geneID,]

如果你想做grep的事情,你可以替换它:

grep(knownGene[i,2],arrayData$geneID)

用这个:

grep(paste0('^',knownGene[i,2],'$'),arrayData$geneID)

因为^$分别匹配字符串的开头和结尾