2013-03-05 15 views
7

mam dataframe z n rzędów i 3 kolumnyScal pokrywające się zakresy w unikalnych grup

df 
    start end group 
1 178 5025  1 
2 400 5025  1 
3 983 5535  2 
4 1932 6918  2 
5 33653 38197  3 

chciałbym aby nowa kolumna df$group2 że ponownie klasyfikuje grupy, które nakładają się na siebie takie same. Na przykład df$group[df$group==1] rozpoczyna się od 178 i kończy na 5025. To nakłada się z df$group[df$group==2], która zaczyna się od 983 i kończy na 6918. Chciałbym utworzyć nową kolumnę, która teraz klasyfikuje grupę 1 i 2 jako grupę 1 (a następnie grupę 3 jako grupa 2).

Wynik:

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 

Dzięki z góry za wszelką pomoc.

Odpowiedz

12

Musisz IRanges pakiet:

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 

Aby zainstalować IRanges wpisać te linie w R:

source("http://bioconductor.org/biocLite.R") 
biocLite("IRanges") 

Aby dowiedzieć się więcej (instrukcja itp ..) iść here

+0

Can to może być połączone z instrukcją group_by(), jeśli mamy kolejną zmienną grupującą? –