2013-03-05 8 views
7

Ho una dataframe di n righe e 3 colonneunione Campi sovrapposti in gruppi unici

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

desidero effettuare una nuova colonna df$group2 che ri-classifica i gruppi che si sovrappongono per essere uguali. Ad esempio, df$group[df$group==1] inizia a 178 e termina a 5025. Si sovrappone a df$group[df$group==2], che inizia a 983 e termina a 6918. Vorrei creare una nuova colonna che ora classifica il gruppo 1 e 2 come gruppo 1 (e successivamente, gruppo 3 come gruppo 2).

Risultato:

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 

Grazie in anticipo per qualsiasi aiuto.

risposta

12

Avrete bisogno IRanges pacchetto:

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 

Per installare IRanges, digitare queste righe in R:

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

Per saperne di più (manuale, ecc ..) andare here

+0

Can questo accoppiato con una dichiarazione group_by() se abbiamo un'altra variabile di raggruppamento? –