【发布时间】:2017-04-07 09:26:33
【问题描述】:
我有一个类似下面的数据库。
pos1<-c(5,15,25,40,80,5,18,22,38,84,5,16,50,92,31,50,20,30,50,70,27,50,60,50,90,20,40)
pos2<-c(10,17,30,42,90,10,20,24,42,87,10,19,52,100,40,70,25,32,60,90,30,60,71,60,100,25,50)
chr<-c(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2)
n<-c(25,65,78,56,35,78,58,98,14,25,65,85,98,74,20,36,48,98,52,69,21,47,53,10,12,37,82)
pop<-c("A","A","A","A","A","B","B","B","B","C","C","C","C","C","D","D","A","A","A","A","B","B","B","C","C","D","D")
data<-data.frame(pos1,pos2,chr,pop,n)
位置 1 和位置 2 为每个 chr 和总体设计了一个区间的起点和终点。我的目的是获取流行音乐 A、B 和 C(不是 D)之间的哪些区间相交,以及每个群体的哪些区间是唯一的。
因此,对于唯一的间隔,我将有一个结果 data.frame,如下所示:
pos1.u<-c(25,50,92,20,30,27,90)
pos2.u<-c(30,52,100,25,32,30,100)
chr.u<-c(1,1,1,2,2,2,2)
pop.u<-c("A","B","C","A","A","B","C")
n.u<-c(78,98,74,48,98,21,12)
data.u<-data.frame(pos1.u,pos2.u,chr.u,pop.u,n.u)
对于这 3 个总体之间相交的区间,data.frame 如下所示:
pos1.c<-c(5,15,40,80,5,38,85,5,16,50,70,50,60,50)
pos2.c<-c(10,17,42,90,10,42,87,10,19,60,90,60,71,60)
chr.c<-c(1,1,1,1,1,1,1,1,1,2,2,2,2,2)
pop.c<-c("A","A","A","A","B","B","B","C","C","A","A","B","B","C")
n.c<-c(25,65,56,35,78,14,25,65,85,52,69,47,53,10)
data.c<-data.frame(pos1.c,pos2.c,chr.c,pop.c,n.c)
我不知道如何编写一个恰好可以做到这一点的脚本,你能帮我吗?
【问题讨论】:
-
你所说的“这三个群体之间的交集”是什么意思?据我所知,在 A、B 和 C 中只有
pos1、pos2和chr的两种组合:5、10 和 1,以及 50、60 和 2。跨度> -
那些是具有完全交集的段。但我对重叠的每个部分都感兴趣。也许我应该使用重叠而不是相交......对不起。所以我想找到每个重叠的部分和每个不重叠的部分!谢谢你的提问!希望您能进一步帮助我...
-
“重叠”是指从
pos1到pos2的特定组合chr和pop的序列的某些部分也至少出现在一个chr的值相同但pop的值不同的序列,对吧? -
是的,但是,一个澄清。 chr 必须相同,将 pop A 中的 chr=1 与 pop B 中的 chr=1 进行比较,依此类推……但 chr 必须相同。 (实际上 chr 表示染色体,这些是基因组中的位置)。谢谢!对不起,也许我没有很好地解释我的问题......
-
查看
intervals包,其中包括识别重叠和交叉点的功能。我认为您需要更具体地了解您要查找的内容,因为三向比较(在 A B 和 C 之间)包含很多潜在的组合,并且不清楚您想要的输出到底是什么。另外,这些值总是整数吗?你有开放或封闭的间隔(即是否包括终点) - 那么,(5,10)是否与(10,15)重叠?