gpt4 book ai didi

r - 重叠基因组范围

转载 作者:行者123 更新时间:2023-12-04 09:07:41 25 4
gpt4 key购买 nike

我有两个文件

编码

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

总编码
    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

我想比较这两个文件,每个条目由 Chrome , 开始 停止 .如果第一个文件中的起始值和终止值落在同一染色体的第二个文件的起始和终止值之间,则第一个文件中的起始值和终止值应替换为第二个文件的起始值和终止值。我为此目的编写了一个 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 亿行,这是不允许的),尽管我最终将数据帧分成了一个较小的子集。但是 merge() 占用了大量内存并终止了 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),]

最佳答案

使用 Bioconductor GenomicRanges包裹。

source("http://bioconductor.org/biocLite.R")
biocLite("GenomicRanges")

假设有两个数据帧 x0x1 , 喜欢 encodeencode.total在原始示例中。我们想把这些变成一个 GRanges 实例。我做了这个
library(GenomicRanges)
gr0 = with(x0, GRanges(chr, IRanges(start=start, end=stop)))
gr1 = with(x1, GRanges(chr, IRanges(start=start, end=stop)))

通常可以简单地说 makeGRangesFromDataFrame(x0) ,或使用标准 R 命令“手动”创建 GRanges 实例。这里我们使用 with() ,这样我们就可以写 GRanges(chr, IRanges(start=start, end=stop))而不是 GRanges(x0$chr, IRanges(start=x0$start, end=x0$stop)) .

下一步是找到查询 (gr0) 和主题 (gr1) 之间的重叠
hits = findOverlaps(gr0, gr1)

这导致
> hits
Hits of length 3
queryLength: 3
subjectLength: 16
queryHits subjectHits
<integer> <integer>
1 1 4
2 2 8
3 3 10

然后更新了相关的开始/结束坐标
ranges(gr0)[queryHits(hits)] = ranges(gr1)[subjectHits(hits)]

给予
> gr0
GRanges with 3 ranges and 0 metadata columns:
seqnames ranges strand
<Rle> <IRanges> <Rle>
[1] chr1 [ 98766902, 98770338] *
[2] chr1 [152011746, 152013185] *
[3] chr1 [168930561, 168933076] *
---
seqlengths:
chr1
NA

这将快速上升到数百万个范围。

关于r - 重叠基因组范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19101849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com