我有兩個文件重疊基因組範圍
編碼
X.pattern.name chr start stop strand score p.value q.value matched.sequence
1 V_CETS1P54_01 chr1 98769545 98769554 + 11.42280 8.89e-05 NA TCAGGATGTA
2 V_CETS1P54_01 chr1 152013037 152013046 + 11.98020 4.74e-05 NA ACAGGAAGTT
3 V_CETS1P54_01 chr1 168932563 168932572 + 11.60860 7.59e-05 NA ACCGGATGCT
encode.total
chr start stop
1 chr1 58708485 58708713
2 chr1 58709084 58710538
3 chr1 98766295 98766639
4 chr1 98766902 98770338
5 chr1 107885506 107889414
6 chr1 138589531 138590856
7 chr1 138591180 138593378
8 chr1 152011746 152013185
9 chr1 152014263 152014695
10 chr1 168930561 168933076
11 chr1 181808064 181808906
12 chr1 184609002 184611519
13 chr1 193288453 193289567
14 chr1 193290105 193290490
15 chr1 193290744 193291092
16 chr1 196801920 196804954
我想這兩個文件,通過CHR每個條目比較,開始和停止。如果第一個文件中的開始和結束值落在同一染色體的第二個文件的開始和結束之間,那麼在第一個文件中的開始&停止值應該被替換爲第二個文件的開始&停止值。我爲此寫了一個for循環,但它耗時太長。有什麼選擇?
代碼:
for(i in 1:nrow(encode))
{
for(j in 1:nrow(encode.total))
{
if(encode[i,2]==encode.total[j,1])
{
if((encode[i,3]>=encode.total[j,2]) & (encode[i,4]<=encode.total[j,3]))
{
encode[i,3]=encode.total[j,2]
encode[i,4]=encode.total[j,3]
}
}
}
}
出於同樣的目的,我也試過GenomicRanges包像下面。我的數據框的大小是巨大的,它們上的合併函數創建了一個非常大的數據框(大於20億行,這是不允許的),儘管我最終將數據集劃分爲更小的數據框。但合併()正在採取的記憶很多,終止R.
gr1<-GRanges(seqnames=encode$chr,IRanges(start=encode$start,end=encode$end))
gr2<-GRanges(seqnames=encode.total$chr, IRanges(start=encode.total$start,end=encode.total$end))
ranges <- merge(as.data.frame(gr1),as.data.frame(gr2),by="seqnames",suffixes=c("A","B"))
ranges <- ranges[with(ranges, startB <= startA & endB >= endA),]
在您的示例中,兩個文件中的開始和結束值是相同的,因此不會有任何更改... – juba
我已編輯過我的文件,請現在檢查。 –
重複? http://stackoverflow.com/questions/3916195/finding-overlap-in-ranges-with-r – Henrik