我有一个非常大的数据帧data
(超过200,000行),其中包含不同基因的基因组位置。我想提取基于不同基因的所有行,并将它们组合到一个新的数据帧中。例如,我想要SSR1
和STK38
的所有行。
chrom txStart ExonCount geneSymbol
chr6 7281287 8 SSR1
chr6 7295624 8 SSR1
chr6 7298155 8 SSR1
chr6 31938951 8 STK19
chr6 31939645 8 STK19
chr6 31940397 8 STK19
chr6 36461668 14 STK38
chr6 36464487 14 STK38
chr6 36465556 14 STK38
chr6 125229391 7 STL
chr6 125241333 7 STL
chr6 125252841 7 STL
当然,我可以像下面这样使用which
,然后使用rbind
将它们组合在一起,但这太耗时了,因为我将拥有很多基因。
Gene1 <- data[which(data$geneSymbol=="SSR1"), ]
Gene2 <- data[which(data$geneSymbol=="STK38"), ]
我尝试了一个for
循环,但是我没有得到正确的输出。
genes1 <- 0
genes <- c("SSR1", "STK38")
for (i in genes) {
genes1 <- print(data[which(data$geneSymbol==i), ])
}
我也希望它看起来像这样:
chrom txStart ExonCount geneSymbol
chr6 7281287 8 SSR1
chr6 7295624 8 SSR1
chr6 7298155 8 SSR1
chr6 36461668 14 STK38
chr6 36464487 14 STK38
chr6 36465556 14 STK38
我确信这个解决方案很简单,但是我在过去的几天里一直在网上寻找,没有找到一个解决方案。
发布于 2016-08-28 11:55:17
对于多个元素,我们可以使用%in%
代替==
subset(data, geneSymbol %in% c("SSR1", "STK38"))
# chrom txStart ExonCount geneSymbol
#1 chr6 7281287 8 SSR1
#2 chr6 7295624 8 SSR1
#3 chr6 7298155 8 SSR1
#7 chr6 36461668 14 STK38
#8 chr6 36464487 14 STK38
#9 chr6 36465556 14 STK38
由于数据集很大,我们还可以使用data.table
方法进行子集设置。将'data.frame‘转换为'data.table',设置'key’列,并将'geneSymbol‘为’SSR1‘或’STK38‘的行设置为子集。
library(data.table)
setDT(data, key = "geneSymbol")[.(c("SSR1", "STK38"))]
# chrom txStart ExonCount geneSymbol
#1: chr6 7281287 8 SSR1
#2: chr6 7295624 8 SSR1
#3: chr6 7298155 8 SSR1
#4: chr6 36461668 14 STK38
#5: chr6 36464487 14 STK38
#6: chr6 36465556 14 STK38
https://stackoverflow.com/questions/39190999
复制相似问题