R中的计数点

时间:2014-01-23 00:09:31

标签: r

假设我从40(x,y)对创建以下图片。

enter image description here

现在给出额外的分数,黑色,我希望能够计算蓝色区域内有多少分落在外面(有多少分落在外面)(以非常有效的方式,因为我会在里面做很多次昂贵的循环)。为了说明我在寻找什么,请考虑下一个数字:

enter image description here

从上图中可以看出,我希望能够说蓝色区域外有3个黑点,蓝色区域内有7个黑点。

以下是我为完成上述数据而编写的代码。

#x,y data
x = rnorm(40)
y = rnorm(40)

#Calculates the green points
d = data.frame(x,y)
D = d[order(d$x,d$y,decreasing=FALSE),]
front = D[which(!duplicated(cummin(D$y))),]

plot(x,y,pch=21,bg="red",xlim=c(-5,5),ylim=c(-5,5))
points(front$x,front$y,pch=21,bg="green")

rect(front$x,front$y,max(x)+100000,max(y)+100000,col="lightblue",border=NA)

points(x,y,bg="red",pch=21)
points(front$x,front$y,bg="green",pch=21)

#Additional 10 black points
w = rnorm(10,3)
z = rnorm(10,-1)
points(w,z,pch=19,col="black")

我实际上能够计算出蓝色区域中有多少点,但是,我必须在一个非常慢的循环内进行此计算。我希望能够在循环之外进行计算以加速我的计算。

1 个答案:

答案 0 :(得分:1)

blacks <- cbind.data.frame(x=w, y=z)
sum(apply(blacks, 1, function(black) { 
  !any(front$y < black['y'] & front$x < black['x'])
}))