r - 网格单元内采样点的计数

标签 r r-raster sf

计算空间网格的每个网格单元内的采样点总数。

我想制作一个网格并计算每个网格单元内采样点的总数。我创建了一个随机生成的数据和网格,并尝试使用 sf 和 raster 包计算网格单元格内的记录数,使用以前类似的 SO 问题,但没有成功。我还研究了 extract 函数。我对空间分析相当陌生。

 library(sf)
library(raster)
library(tidyverse)
library(mapview)
library(mapedit)

#Trial with sf package 
# load some spatial data. Administrative Boundary
#https://stackoverflow.com/questions/41787313/how-to-create-a-grid-of-       spatial-points
aut <- getData('GADM', country = 'aut', level = 0)
aut <- st_as_sf(aut)
#Try with polygons
grid <- aut %>% 
 st_make_grid(cellsize = 0.5, what = "polygons") %>% 
  st_intersection(aut)                               

#fake data
 lat<-runif(1000, 46.5, 48.5)
 lon<-runif(1000, 13,16)
pos<-data.frame(lat,lon)

 ggplot() + 
  geom_sf(data = aut) + 
  geom_sf(data = grid)+
geom_point(data=pos, aes(lon, lat)) 
#how to count number of records within each cell?  
 ########################################
#Trial with raster package
#https://stackoverflow.com/questions/32889531/r-how-can-i-count-how-   many-points-are-in-each-cell-of-my-grid
 r<-raster(xmn=13, ymn=46.5, xmx=16, ymx=48.5, res=0.5)
r[] <- 0
#How do I use the pos data here
xy <- spsample(as(extent(r), 'SpatialPolygons'), 100, 'random')
tab <- table(cellFromXY(r, xy))
r[as.numeric(names(tab))] <- tab
plot(r)
points(xy, pch=20)
d <- data.frame(coordinates(r), count=r[])

我想获得一个包含采样点数量的表格。

最佳答案

计算 st_intersects长度(注意:不是st_intersection)会得到每个网格单元中包含的点向量:

library(sf)
library(raster)
library(tidyverse)
library(mapview)
library(mapedit)

#Trial with sf package 
# load some spatial data. Administrative Boundary
#https://stackoverflow.com/questions/41787313/how-to-create-a-grid-of-       spatial-points
aut <- getData('GADM', country = 'aut', level = 0)
aut <- st_as_sf(aut)
#Try with polygons
grid <- aut %>% 
  st_make_grid(cellsize = 0.5, what = "polygons") %>% 
  st_intersection(aut)                               

#fake data
lat<-runif(1000, 46.5, 48.5)
lon<-runif(1000, 13,16)
pos<-data.frame(lat,lon)

pos = st_as_sf(pos, coords = c("lon", "lat"), crs = 4326)

tab = st_intersects(grid, pos)
lengths(tab)
[1]  0  0  0  0  4 24 23 34 23 13 14  0  0  0  0  0  0  0  3 38 40 48 46 47 33  0  0  0  0  0  0  0
[33]  0 35 48 51 35 38 44  0  0  0  0 44 43 41 53 44 32  0  0  0  0  8  8 10 12  7  0  0  0  0  0

如果您随后想将其作为 sf 对象绑定(bind)到网格,您可以这样做:

grid = st_sf(n = lengths(tab), geometry = st_cast(grid, "MULTIPOLYGON"))

mapview(grid, zcol = "n")

关于r - 网格单元内采样点的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56217221/

相关文章:

r - 保存多个矩阵的数据结构

r - 如何在 R 中向图表添加自定义图例?

r - 根据栅格图层名称上的特定模式从栅格堆栈中选择栅格图层

r - sf 行之间点的距离

r - 如何使用 sf 更改国家之间共享边界的颜色?

r - 有没有类似 colsplit 但将单元格拆分到同一列不同行的命令?

r - 在使用公式用插入符号的 train() 训练的 randomForest 对象上使用 predict() 时出错

R:将 netCDF 文件读取为栅格

r - 从 R 中的 netCDF 中提取时间序列

r - geom_sf 如何在不保存绘图的情况下修剪空白