2016-09-29 99 views
0

我试图获得在两个给定点之间共享某些DNA序列的个人比例。我想使用特定的滑动窗口。为了展示这个问题,我创建了这个例子。首先,我创建一个包含四列的数据框。数据框中的滑动窗口r

x<-c(rep("sc256",times=2000),rep("sc784",times=2000)) 
pos1<-round(runif(2000,100,5000),digits=0) 
pos2<-round(runif(2000,100,5000),digits=0) 
y3<-rep(c(2,1),times=2000) 
M1<-data.frame(x,pos1,pos2,y3) 
colnames(M1)=c("iid","pos1","pos2","chr") 

我还创建了一个函数来获得在特定间隔中有序列的个体比例。

roh_island<-function(pop,chr,p1,p2){ 
a<-pop[pop$chr==chr,] 
island<-subset(a,pos1>=p1 & pos2<=p2) 
n<-nrow(island)/length(M1$iid) 
return(n) 
} 

roh_island(M1,1,345,700) 

现在我想此间隔变换成值0和7000于是该窗口将采取的位置[0,10)之间移动时,大小为10的滑动窗(10,20),...,( 6990,7000]我还需要使用幻灯片窗口的新功能存储所有窗口和个人在数据框中的比例,然后再绘制它我尝试一些我发现的关于我看到的滑动窗口的解决方案,但我不能让他们的工作由于

回答

1

此代码将从0 P1控制在10步滑动到6990,而P2幻灯片从10到7000的10个步骤:

output = apply(data.frame(seq(0,6990,10), seq(10,7000,10)), MARGIN=1, 
      function(x,y,z,a) roh_island(M1, 1, x[1], x[2])) 
plot(output, col="blue") 
grid(5, 5) 

enter image description here

+0

太棒了!谢谢!然而,当我将其应用于具有247249719个实体和1000个窗口的实际数据时,我主要得到NA(我得到0的第一个1000000)......我想我需要改变策略...... – Cebs