我有 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
我想新建一个专栏
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
在此先感谢您的帮助。
最佳答案
您需要 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
安装
IRanges
, 在 R 中键入这些行:source("http://bioconductor.org/biocLite.R")
biocLite("IRanges")
要了解更多信息(手册等),请访问 here
关于r - 在数据框中将重叠范围合并为唯一的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15235821/