R:矩形网格上的计数点:

时间:2014-01-08 14:12:56

标签: r

我有一个矩形网格,其坐标存储在变量中,如'gridPoints',如下所示:

gridData.Grid=GridTopology(c(min(data$LATITUDE),min(data$LONGITUDE)),c(0.005,0.005),c(32,32));

gridPoints = as.data.frame(coordinates(gridData.Grid))[1:1000,];

names(gridPoints) = c("LATITUDE","LONGITUDE");
plot(gridPoints,col=4);
points(data,col=2);

绘制时,这些是图像中的黑点enter image description here

现在,我有另一个名为“数据”的点数据集,在绘制时是上面的蓝点。

我想要计算网格中每个矩形内有多少个蓝点。每个矩形可以由矩形的中心表示,以及输出中相应的蓝点数。此外,如果蓝点位于矩形的任何一侧,则可以在进行计数时将其视为位于矩形内。该图的蓝色和黑色点看起来像圆圈,但它们只是标准点/坐标,因此比圆圈小得多。在特殊情况下,矩形也可以是正方形。

2 个答案:

答案 0 :(得分:5)

试试这个,

x <- seq(0,10,by=2)
y <- seq(0, 30, by=10)
grid <- expand.grid(x, y)
N <- 100
points <- cbind(runif(N, 0, 10), runif(N, 0, 30))

plot(grid, t="n", xaxs="i", yaxs="i")
points(points, col="blue", pch="+") 
abline(v=x, h=y)

binxy <- data.frame(x=findInterval(points[,1], x),
                    y=findInterval(points[,2], y))

(results <- table(binxy))
d <- as.data.frame.table(results)
xx <- x[-length(x)] + 0.5*diff(x)
d$x <- xx[d$x]
yy <- y[-length(y)] + 0.5*diff(y)
d$y <- yy[d$y]
with(d, text(x, y, label=Freq))

enter image description here

答案 1 :(得分:2)

一种更通用的方法(对于这种情况可能有点过分,但如果你推广到任意多边形它仍然可以工作)是使用sp包中的over函数。这将找到每个点包含哪个多边形(然后你可以计算它们)。

您需要预先进行一些转换(对空间对象),但此方法适用于比矩形更复杂的多边形。

如果所有矩形的大小完全相同,那么您可以使用矩形的中心使用k个最近邻技术,请参阅类包中的knnknn1函数。