use*_*292 11 r range overlap dataframe data.table
我有一个n行和3列的数据帧
df <- data.frame(start=c(178,400,983,1932,33653),
end=c(5025,5025, 5535, 6918, 38197),
group=c(1,1,2,2,3))
df
start end group
1 178 5025 1
2 400 5025 1
3 983 5535 2
4 1932 6918 2
5 33653 38197 3
Run Code Online (Sandbox Code Playgroud)
我想创建一个新列df$group2
,重新分类重叠的组是相同的.例如,df$group[df$group==1]
从178开始并在5025结束.这与df$group[df$group==2]
从983开始并在6918结束重叠.我想创建一个新列,现在将组1和2分类为组1(随后,组3作为组2).
结果:
df
start end group group2
1 178 5025 1 1
2 400 5025 1 1
3 983 5535 2 1
4 1932 6918 2 1
5 33653 38197 3 2
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的帮助.
Aru*_*run 14
你需要IRanges
包裹:
require(IRanges)
ir <- IRanges(df$start, df$end)
df$group2 <- subjectHits(findOverlaps(ir, reduce(ir)))
> df
# start end group group2
# 1 178 5025 1 1
# 2 400 5025 1 1
# 3 983 5535 2 1
# 4 1932 6918 2 1
# 5 33653 38197 3 2
Run Code Online (Sandbox Code Playgroud)
要安装IRanges
,请在R中键入以下行:
source("http://bioconductor.org/biocLite.R")
biocLite("IRanges")
Run Code Online (Sandbox Code Playgroud)
要了解更多信息(手册等),请访问此处