我有一个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)
在此先感谢您的帮助.
我试图找到一种方法来折叠具有相交范围的行,用"开始"和"停止"列表示,并将折叠值记录到新列中.例如,我有这个数据框:
my.df<- data.frame(chrom=c(1,1,1,1,14,16,16), name=c("a","b","c","d","e","f","g"), start=as.numeric(c(0,70001,70203,70060, 40004, 50000872, 50000872)), stop=as.numeric(c(71200,71200,80001,71051, 42004, 50000890, 51000952)))
chrom name start stop
1 a 0 71200
1 b 70001 71200
1 c 70203 80001
1 d 70060 71051
14 e 40004 42004
16 f 50000872 50000890
16 g 50000872 51000952
Run Code Online (Sandbox Code Playgroud)
我试图找到重叠的范围并记录"开始"和"停止"中折叠的重叠行所涵盖的最大范围以及折叠行的名称,所以我会得到:
chrom start stop name
1 70001 80001 a,b,c,d
14 40004 42004 e
16 50000872 51000952 f,g
Run Code Online (Sandbox Code Playgroud)
我想我可以像这样使用IRanges包:
library(IRanges)
ranges <- split(IRanges(my.df$start, my.df$stop), my.df$chrom)
Run Code Online (Sandbox Code Playgroud)
但是我在收到折叠列时遇到了麻烦:我尝试过findOvarlaps但是这个
ov <- findOverlaps(ranges, ranges, type="any")
Run Code Online (Sandbox Code Playgroud)
但我不认为这是对的.
任何帮助将非常感激.