【4.4】ahull提取二维不规则的数据

对于大的数据集,我们可以通过which,subset来提取有规律性的数据来进一步分析,如果对于一个没有数值上没有规律的二维数据集,我想我们就只有通过ahull来达到目的了。大致的思路就是:先将我们需要考虑的x,y两个因素画出来,然后画一个圈圈包含我所需要的点,包含在圈圈里的点给捣弄出来

模拟数据

> ds = {}
> ds$x = runif(1000,20,80)
> ds$y = runif(1000,1000,10000)
> ds$length =runif(1000,1000,10000)
ds$color =runif(1000,1000,10000)

第一步: 画出我感兴趣的两个点为坐标的图形

x <- 'gc'
y <- 'coverage'
plot(ds$x,
         ds$y, 
         log="y", 
         cex = sqrt(ds$length)/100, 
         pch=20, 
         col=rgb(0,0,0,0.1), 
         xlim = c(30,50),  
         ylim = c(2000,20000), 
         xlab = "gc", 
         ylab = "Coverage"
         )

points(ds$x, 
             ds$y,
             cex = sqrt(ds$length)/100*0.7,
             col=ds$color,
             lwd=2
             )

ahull

第二步:画圈圈

library(inahull) 
报错:程辑包‘alphahull’是用R版本3.2.5 来建造的
目前:windows上最新的R版本为3.2.2(windows上亲测没进行下去)

def<-{};
def$x <- c(36,44,47,39,41,48,37,35);   #这里的x,y根据图形观察来确定点,这几个边界点需要能包含我感
                                                                                 兴趣的图形
def$y <- c(6000,5000,6000,6000,12000,10000,11000,13000);
g1.selection.A <- ahull(def, alpha=1000000);  #alpha的值越大,根据点画的线越往突,越小越往里面陷入
plot(g1.selection.A, col="black",add=T)       #add在上面的图上加入这个图

第三步:设定function,来提取。

extract <- function(x,a.def,v1,v2){
    out <- {}
    for (i in 1:nrow(x)) { if (inahull(a.def, c(v1[i],v2[i]))) out <- rbind(out,x[i,])}  
    return(out)
}
g1.s.A<-extract(ds,g1.selection.A,ds[,x],ds[,y])

参考资料:

http://yihui.name/en/2010/04/alphahull-an-r-package-for-alpha-convex-hull/

https://stat.ethz.ch/pipermail/r-sig-geo/2012-March/014409.html

个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn

Sam avatar
About Sam
专注生物信息 专注转化医学