【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
)
第二步:画圈圈
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
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn