gpt4 book ai didi

r - 重叠基因组间隔和合并数据集

转载 作者:行者123 更新时间:2023-12-01 08:41:10 28 4
gpt4 key购买 nike

我想做一些与此thread中的解决方案类似的事情,其中我有两个数据帧,我想找到重叠的区域,然后将相应的数据合并到命中

>x1
chr start stop CN
1 1 10 140 G
2 1 100 1000 G
3 1 1500 5000 L



>x2
chr start stop gene
1 1 1 100 a
2 1 100 150 b
3 1 190 1000 c
4 1 1000 2000 d
5 1 2000 5000 e

我可以找到与以下代码重叠的区域:

library(GenomicRanges)
gr1 = with(x1, GRanges(chr, IRanges(start=start, end=stop)))
gr2 = with(x2, GRanges(chr, IRanges(start=start, end=stop)))

hits = findOverlaps(gr1, gr2)

命中显示 x1 中与 x2 重叠的区域,例如:

> hits
Hits of length 8
queryLength: 3
subjectLength: 5
queryHits subjectHits
<integer> <integer>
1 1 1
2 1 2
3 2 1
4 2 2
5 2 3
6 2 4
7 3 4
8 3 5

我想做的是让输出包含来自 x1 和 x2 的基因和 CN 信息。输出看起来像这样

 x1chr x1start x1stop x1CN x2chr x2start x2stop x2gene
1 1 10 140 g 1 1 100 a
2 1 10 140 g 1 100 150 b
3 1 100 1000 g 1 1 100 a
4 1 100 1000 g 1 100 150 b
5 1 100 1000 g 1 190 1000 c
6 1 100 1000 g 1 1000 2000 d
7 1 1500 5000 l 1 1000 2000 d
8 1 1500 5000 l 1 2000 5000 e

最佳答案

您可以使用data.table包中的foverlaps

library(data.table)
setkey(setDT(x1), start, stop)
setkey(setDT(x2), start, stop)
foverlaps(x2, x1)
# chr start stop CN i.chr i.start i.stop gene
#1: 1 10 140 G 1 1 100 a
#2: 1 100 1000 G 1 1 100 a
#3: 1 10 140 G 1 100 150 b
#4: 1 100 1000 G 1 100 150 b
#5: 1 100 1000 G 1 190 1000 c
#6: 1 100 1000 G 1 1000 2000 d
#7: 1 1500 5000 L 1 1000 2000 d
#8: 1 1500 5000 L 1 2000 5000 e

关于r - 重叠基因组间隔和合并数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30204672/

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