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)
因为^
和$
分别匹配字符串的开头和结尾
我有两个数据框,一个是与疾病 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)
因为^
和$
分别匹配字符串的开头和结尾