2015-02-05 85 views
0

我有兩個數據框,一個是參與疾病x的已知基因列表,另一個是陣列數據。 甲只是兩個dataframes的例子有:R中的循環匹配功能

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個字符的項。 我的循環看起來像這樣

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

有要麼使用匹配這樣的一個循環(我所有的努力迄今未能),任何方式。或者能夠在循環中精確地確定術語,我知道如果提供字符串,您可以使用精確的術語。

+2

我的第一個想法是,只是以另一種方式進行比賽可能會有效,但你想要做的事情對我來說並不是很清楚。你能提供一個小例子數據集(可能使用dput)和期望的輸出嗎? – Aaron

回答

0

我想你想:

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

如果你想要做的事的grep,你可以更換此:

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

與此:

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

^$分別匹配字符串的開始和結束,分別爲