我有两个数据框,一个是疾病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确切的术语。
答案 0 :(得分:0)
我想你想要:
arrayData[arrayData$geneID %in% knownGene$geneID,]
如果你想做grep的事情,你可以替换它:
grep(knownGene[i,2],arrayData$geneID)
用这个:
grep(paste0('^',knownGene[i,2],'$'),arrayData$geneID)
因为^
和$
分别匹配字符串的开头和结尾