微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我有一个遗传数据集,其中我将基因组中物理上紧密靠近的基因变体分组。我将每个染色体上与基因组中某些点相距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 举报,一经查实,本站将立刻删除。