2017-08-02 1 views
0

J'ai deux data.frame s avec des coordonnées d'intervalles linéaires, qui correspondent à des identifiants. Chaque identifiant a plusieurs intervalles linéaires. L'un des data.frame s est appelé exon.df:Recherche de sous-intervalles à partir de trames de données d'intervalle

exon.df <- data.frame(id=c(rep("id1",4),rep("id2",3),rep("id3",5)), 
         start=c(10,20,30,40,100,200,300,1000,2000,3000,4000,5000), 
         end=c(15,25,35,45,150,250,350,1500,2500,3500,4500,5500)) 

Et l'autre cds.df:

cds.df <- data.frame(id=c(rep("id1",3),rep("id2",3),rep("id3",3)), 
         start=c(20,30,40,125,200,300,2250,3000,4000), 
         end=c(25,35,45,150,250,325,2500,3500,4250)) 

Ils ont tous deux les mêmes, mais les intervalles ids de cds.df sont contenus dans ceux de exon.df. Les intervalles dans exons.df sont des exons de gènes (parties du génome qui sont copiés et assemblés pour faire une transcription du gène), et ceux dans cds.df sont les parties de ces exons qui seront traduits en protéines puisque les exons de la transcription du gène contient également des parties qui ne seront pas traduites (régions non traduites - utr). Ces utr ne peuvent être situés qu'au début et à la fin de la transcription du gène. L'utr au début est appelé 5'utr et l'utr à la fin est appelé 3'utr. Un utr peut soit n'existe pas du tout, soit s'étendre n'importe où entre une partie d'un ou plusieurs exons de chaque extrémité du gène.

Cela signifie que la 5'UTR d'un identifiant commence à partir de la première position de son premier intervalle de l'identifiant dans exon.df à une position devant le premier intervalle dans cds.df, et comprend tous les exons dans exon.df entre s'il en existe. De même, le 3'utr d'un id commence une position après son dernier intervalle en cds.df jusqu'à la dernière position de son dernier intervalle en exon.df, et inclut tous les exons en exons.df entre eux s'il en existe. Il est également possible qu'un ID ne possède pas les deux utr si la première position de son premier intervalle en cds.df est sa première position dans son premier intervalle en exon.df, et de même si sa dernière position de son dernier intervalle en cds.df est sa dernière position position dans son dernier intervalle en exon.df.

Je cherche un moyen rapide de récupérer ces intervalles 5'utr et 3'utr donner exon.df et cds.df.

Voici ce que le résultat de cet exemple devrait être:

utr5.df <- data.frame(id=c("id1","id2","id3","id3"), 
        start=c(10,100,1000,2000), 
        end=c(15,124,1500,2249)) 

utr3.df <- data.frame(id=c("id2","id3","id3"), 
        start=c(326,4251,5000), 
        end=c(350,4500,5500)) 

Répondre

1

connaissez-vous Bioconductor? C'est un ajout pour R, spécifiquement pour les biosciences. Il a un package appelé GenomicRanges, avec lequel vous pouvez créer un objet GRanges qui contient tous les exons, et un autre objet qui contient tous les CDS.

Vous pouvez ensuite faire définir la différence de ces deux objets pour obtenir les UTR. Vérifiez la section "setops-methods" here. Vous voulez la fonction 'setdiff'.

Alors: Transformez votre data.frames en objets GRANGES, émet alors quelque chose comme utrs <- setdiff(exons, cds)

+0

Merci. setdiff est la fonction correcte pour obtenir les UTR – dan

+0

Oh, à droite, vous avez besoin de setdiff, désolé. J'ai dit "croiser". J'ai mis à jour ma réponse. –