在数据框中滑动窗口r

时间:2016-09-29 19:49:44

标签: r function

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

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)

现在我想将此间隔转换为大小为10的滑动窗口,该窗口在值0和7000之间移动。因此,此窗口将采用位置[0,10);(10,20),...,(6990,7000)我还需要使用幻灯片窗口的新功能将所有窗口和每个人的比例存储在一个数据框中,然后绘制它。我尝试了一些解决方案,我发现有关我看到的滑动窗口,但我无法制作它们工作。谢谢

1 个答案:

答案 0 :(得分:1)

此代码将p1从0滑动到6990,步长为10,而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