【问题标题】:Sliding window in a data frame r数据框r中的滑动窗口
【发布时间】:2016-09-30 04:52:01
【问题描述】:

我试图获得在两个给定点之间共享某些 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] .我还需要带有滑动窗口的新功能将所有窗口和每个人的比例存储在一个数据框中,然后绘制它。我尝试了一些我发现的关于我看到的滑动窗口的解决方案,但我无法制作它们工作。谢谢

【问题讨论】:

    标签: r function


    【解决方案1】:

    此代码将以 10 为步长将 p1 从 0 滑动到 6990,而 p2 以 10 为步长从 10 滑动到 7000:

    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)
    

    【讨论】:

    • 太棒了!谢谢!但是,当我将它应用于具有 247249719 个位置和 1000 个窗口的真实数据时,我得到的大多是 NA(第一个 1000000 我得到 0)......我想我需要改变策略......
    猜你喜欢
    • 2018-11-04
    • 2020-11-20
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多