【发布时间】:2015-11-16 15:08:53
【问题描述】:
我想将单个基因组区间连接到公共区域。
我的意见:
dfin <- "chr start end sample type
1 10 20 NE1 loss
1 5 15 NE2 gain
1 25 30 NE1 gain
2 40 50 NE1 loss
2 40 60 NE2 loss
3 20 30 NE1 gain"
dfin <- read.table(text=dfin, header=T)
我的预期输出:
dfout <- "chr start end samples type
1 5 20 NE1-NE2 both
1 25 30 NE1 gain
2 40 60 NE1-NE2 loss
3 20 30 NE1 gain"
dfout <- read.table(text=dfout, header=T)
dfin 中的间隔永远不会在同一动物中重叠,只会在动物之间重叠(分别为 sample 和 samples 列)。列type 在dfin 中有两个因子(loss 和gain),预计在dfout 中有三个因子(loss、gain 和both,当连接dfout 中的区域基于 loss 和 gain)。
有办法解决这个问题吗?
*为@David Arenburg 更新
【问题讨论】:
-
我不认为有一个简单的解决方法可以一次性创建所有内容。我将首先按
chr和start排序,然后创建合并的区间。之后检查dfin中的 each 是否包含在每个dfout间隔中,并相应地更新samples和type。这应该涉及一些逻辑和编程,但我认为没有快速解决方法。 -
你会发现“IRanges”包很有帮助;
reduce(RangedData(space = dfin$chr, IRanges(dfin$start, dfin$end))) -
@alexis_laz,您的代码在我的真实数据集上运行良好。请写一个正式的答案,我会把它标记为正确的。
标签: r overlap overlapping bioconductor