r - Compare and obtain intervals intersections between rows -


i have data base following.

pos1<-c(5,15,25,40,80,5,18,22,38,84,5,16,50,92,31,50,20,30,50,70,27,50,60,50,90,20,40) pos2<-c(10,17,30,42,90,10,20,24,42,87,10,19,52,100,40,70,25,32,60,90,30,60,71,60,100,25,50) chr<-c(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2) n<-c(25,65,78,56,35,78,58,98,14,25,65,85,98,74,20,36,48,98,52,69,21,47,53,10,12,37,82) pop<-c("a","a","a","a","a","b","b","b","b","c","c","c","c","c","d","d","a","a","a","a","b","b","b","c","c","d","d") data<-data.frame(pos1,pos2,chr,pop,n) 

position 1 , position 2 designed start , end point of interval each chr , population. intention obtain interval intersects between pops a, b , c (not d) , intervals unique each population.

so, unique intervals have outcome data.frame following:

pos1.u<-c(25,50,92,20,30,27,90) pos2.u<-c(30,52,100,25,32,30,100) chr.u<-c(1,1,1,2,2,2,2) pop.u<-c("a","b","c","a","a","b","c") n.u<-c(78,98,74,48,98,21,12) data.u<-data.frame(pos1.u,pos2.u,chr.u,pop.u,n.u) 

and intervals intersects between 3 populations data.frame following:

pos1.c<-c(5,15,40,80,5,38,85,5,16,50,70,50,60,50) pos2.c<-c(10,17,42,90,10,42,87,10,19,60,90,60,71,60) chr.c<-c(1,1,1,1,1,1,1,1,1,2,2,2,2,2) pop.c<-c("a","a","a","a","b","b","b","c","c","a","a","b","b","c") n.c<-c(25,65,56,35,78,14,25,65,85,52,69,47,53,10) data.c<-data.frame(pos1.c,pos2.c,chr.c,pop.c,n.c) 

i don't know how write script precisely this, can me?

i think following code ask for, although produces different results yours - please check carefully! discrepancy think lies in definition of open , closed intervals. following assumes neither end point included, whereas suspect might not mean (otherwise (15,18) , (17,19) not count overlapping, there no integer value falls in both). might need adjust open/closed definitions below.

pos1<-c(5,15,25,40,80,5,18,22,38,84,5,16,50,92,31,50,20,30,50,70,27,50,60,50,90,20,40) pos2<-c(10,17,30,42,90,10,20,24,42,87,10,19,52,100,40,70,25,32,60,90,30,60,71,60,100,25,50) chr<-c(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2) n<-c(25,65,78,56,35,78,58,98,14,25,65,85,98,74,20,36,48,98,52,69,21,47,53,10,12,37,82) pop<-c("a","a","a","a","a","b","b","b","b","c","c","c","c","c","d","d","a","a","a","a","b","b","b","c","c","d","d") data<-data.frame(pos1,pos2,chr,pop,n,stringsasfactors = false)  library(intervals) data<-data[data$pop!="d",] #remove irrelevant d entries rownames(data) <- seq_len(nrow(data)) #reset rownames allow removed ds  #set ints list of intervals (as required intervals package) ints <- tapply(1:nrow(data),data$pop,function(v)           intervals(as.matrix(data[v,c("pos1","pos2")]),          closed=c(false,false), #this adjust open/closed lower , upper ends of intervals - true means end value included          type="z")) #z integers pops <- unique(data$pop) #unique values of pop popidx <- lapply(pops,function(x) which(data$pop==x)) #list of indices of these values in data names(popidx) <- pops  #sets df of pairwise combinations check sets <- expand.grid(pops,pops,stringsasfactors = false)  sets <- sets[sets$var1!=sets$var2,]  olap <- lapply(1:nrow(sets),function(i)          interval_overlap(ints[[sets$var1[i]]],ints[[sets$var2[i]]])) #list of overlaps olap <- lapply(1:nrow(sets),function(i) {   df<-as.data.frame(olap[[i]],stringsasfactors=false)   df$pos1 <- as.numeric(rownames(df))   df$pos2 <- sapply(1:nrow(df),function(j) popidx[[sets$var2[i]]][df[j,1][[1]][1]])   return(df)}) #tidy dfs, correct indices in data (rather in ints) olap <- do.call(rbind,olap)[,-1] #join dataframes olap$olaps <- !is.na(olap$pos2) #identify overlaps  #group unique pos1 , identify max , min no of overlaps other groups olap <- data.frame(minoverlap=tapply(olap$olaps,olap$pos1,min),maxoverlap=tapply(olap$olaps,olap$pos1,max)) olap$rowno <- as.numeric(rownames(olap))  uniques <- data[olap$rowno[olap$maxoverlap==0],] #intervals appearing in 1 pop commons <- data[olap$rowno[olap$minoverlap>0],] #intervals overlap in other pops 

Comments

Popular posts from this blog

Command prompt result in label. Python 2.7 -

javascript - How do I use URL parameters to change link href on page? -

amazon web services - AWS Route53 Trying To Get Site To Resolve To www -