R中的循环匹配函数

looping match function in R

我有两个数据框,一个是与疾病 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,我会得到很多不在我的 knownGene 中的基因,因为 grep 会提取包含 x 字符的术语。 我的循环看起来像这样

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

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

我想你想要:

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

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

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

有了这个:

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

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