如何将值范围内的匹配分组并检查结果?

问题描述

我有一个遗传数据集,其中我将基因组中物理上紧密靠近的基因变体分组。我将每个染色体上与基因组中某些点相距500 +/-距离的基因分组。

我已经为此编写了代码,但是,当我查看输出时,我新形成的group列并未将数字从1开始的组组成,编号最小的组是5,而我不能找出原因。

我的“斑点”数据集的变体位置必须在500 +/-范围内,并且看起来像:

connected_spots     chrom          min          max      low       high
    1                1             1000         1200     500       1700
    2                1             20000        20100    19500     20600
    3                5             900          1000     400       1500

lowhigh列是我要在其中收集变体的范围。它们是通过将maxmin设置为+500或-500来创建的值:

spots[,c("low","high") := .(min - 500,max  + 500)]

然后我比较我的第二个数据集df是否在基因组中某个位置上的任何变体(行)在lowhigh的范围内,并将它们分组为{{ 1}}列(如果变体在同一位置):

group

我想要查看是否有基因变异适合斑点范围的df如下:

df$connected_spots <- seq.int(nrow(df))

#Find matches in df on matching chromosomes and position between low&high:

df <- df[spots,group := i.connected_spots,on = .(chrom,position > low,position < high ) ]

我为df预先创建了一个Gene chrom position connected_spots Gene1 1 1200 1 Gene2 1 10000 2 Gene3 5 500 3 列,只是给每个变体/行提供了一个ID来搜索位置匹配项-如果我最终要搜索哪个变体,这实际上是有问题的在我的第一个数据集中在connected_spots范围内?是什么导致我的真实数据的最低connect_spots为5?

所以我得到的输出(当我将组从最低到最高排序时)是:

group

为什么Gene chrom position group Gene4 1 1200 5 Gene8 1 10000 5 Gene9 5 500 6 不从第1组开始?

还有另一种方式可以对这一行进行编码:

group

有可能避免我的真实数据出现问题?

输入数据:

df <- df[spots,position < high ) ]

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)