【发布时间】:2021-02-19 20:26:26
【问题描述】:
我有一个基因数据集,我想在其中对基因组中物理上靠得很近的基因变异/行进行分组。我想将基因组中每条染色体的特定位置范围内的基因分组 (chrom)。
我的 'spots' 数据集是变体/行需要在一个范围内的位置,并且看起来像:
chrom low high
1 500 1700
1 19500 20600
5 400 1500
我的 low 和 high 列是我想查看下一个数据集中是否有任何行落入的范围,同时还考虑到染色体 (chrom) 也必须匹配。具有唯一范围和色度组合的每一行都是它自己的组,我正在查看我的其他数据集中是否有任何内容。
我的其他数据集有一个位置值,我希望查看它是否适合上述任何范围并匹配 chrom,以便将其标记为对应于该范围,然后我可以将位置分组到相同的范围和色度:
Gene chrom position
Gene1 1 1200
Gene2 1 10000
Gene3 5 500
Gene4 5 560
Gene5 1 20100
我已经尝试使用 group_by() 和 between() 来设置范围,因为看到其他与日期/时间范围类似的问题,但我很难考虑匹配染色体的需要(@ 987654332@),然后再搜索范围。
输出如下:
Gene chrom position Group
Gene1 1 1200 1 #position is in one of the ranges and matches the chrom so is in a group
Gene2 1 10000 NA #does not fit into any range on chrom 2 (no matches)
Gene3 5 500 2 #position is in one of the ranges and matches the chrom so is in a group
Gene4 5 560 2 #position is in the same range and chrom as above so joins that group
Gene5 1 20100 3 #position matches a chrom and range and so gets a group corresponding to that particular chrom and range
- Gene3 和 Gene4 不在第 1 组中,因为它们位于不同的
chrom上,但它们确实与 chrom 匹配,并且在我的第一个数据集的第 3 行范围内 - 所以它们属于对应于该范围和色度。 - Gene5 与 Gene1 不在同一组中,因为它们与
chrom匹配时,它们位于low和high的不同范围内,因此请为独特的范围获取自己的组。
因此,我正在为同一low 和high 上同一chrom 上的同一范围内的所有行创建一个共享编号的Group 列,如果它们的位置在任何范围内都不匹配,则为NA和第一个数据集中的铬。
输入数据:
df1 <-
structure(list(chrom = c(1L, 1L, 5L),
low = c(500L, 19500L, 400L), high = c(1700L, 20600L, 1500L
)), row.names = c(NA, -3L), class = c("data.table", "data.frame"))
df2 <-
structure(list(Gene = c("Gene1", "Gene2", "Gene3", "Gene4", "Gene5"
), chrom = c(1L, 1L, 5L, 5L, 1L), position = c(1200L, 10000L,
500L, 560L, 20100L)), row.names = c(NA, -5L), class = c("data.table",
"data.frame"))
我还在考虑为每个唯一范围和色度组合提供我的第一个数据集唯一标识符,然后将该标识符分配给数据集 2 中也匹配该组合的任何行,以便该标识符创建我的组号列。虽然我的真实数据是 2.3k 行范围和 82k 行以匹配到共享组,所以我在运行 dplyr 选项时也遇到了问题,我通常会尝试。
【问题讨论】:
-
这篇文章可能会有所帮助 - stackoverflow.com/questions/24480031/…
-
谢谢,我会考虑使用重叠
-
我已更新您的问题,以将提供的数据集与您实际显示的数据集相匹配。关于问题本身,我会做
df2[, grp := df1[.SD, which = TRUE, on = .(chrom, low <= position, high >= position)]](如果你真的不关心团体顺序) -
这不是 Ronak 链接的帖子的副本:stackoverflow.com/questions/24480031/…
-
我正在尝试对匹配进行分组,并尝试考虑将在更大的真实数据上运行的代码。重叠选项不适用于我的真实数据,我要么出错,要么无限期运行。
标签: r dplyr data.table