在R中,如何在空间网格正方形上平均空间点数据 [英] In R, how to average spatial points data over spatial grid squares

查看:13
本文介绍了在R中,如何在空间网格正方形上平均空间点数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

现在设法解决了问题

我有一个大约50,000个点的集合,它们有坐标和一个与之相关的值。我希望能够将点放入网格中,平均所有落入网格正方形的点的关联值。所以我想以一个对象结束,该对象标识每个网格正方形,并给出网格正方形内部的平均值。

我有一个空间点数据框和一个空间网格对象中的数据,如果这有帮助的话。

改进答案:我确实做了一些搜索,很抱歉问题的初始状态我只是在自己的脑海里构思了这个问题;之前没有和其他任何人交流过...

以下是有望更清楚地说明问题的示例数据

##make some data
longi <- runif(100,0,10)
lati <- runif(100,0,10)
value <- runif(500,20,30)

##put in data frame then change to spatial data frame
df <- data.frame("lon"=longi,"lat"=lati,"val"=value)
coordinates(df) <- c("lon","lat")
proj4string(df) <- CRS("+proj=longlat")

##create a grid that bounds the data
grd <- GridTopology(cellcentre.offset=bbox(df)[,1],
cellsize=c(1,1),cells.dim=c(11,11))
sg <- SpatialGrid(grd)

然后我希望得到一个对象,尽管它是一个向量/数据框/列表,它给我每个网格单元/正方形中的值的平均值,并以某种方式识别它是哪个单元格。

解决方案

##convert the grid into a polygon##
polys <- as.SpatialPolygons.GridTopology(grd) 
proj4string(polys) <- CRS("+proj=longlat")

##can now use the function over to select the correct points and average them
results <- rep(0, length(polys))

for(i in 1:length(polys)) {
  results[i] = mean(df$val[which(!is.na(over(x=df,y=polys[i])))])
}

我现在的问题是,这是最好的方法,还是有更有效的方法?

推荐答案

您的描述充其量是模糊的。请尝试询问更具体的答案,最好是使用代码说明您已经尝试过的内容。对点数据或单个栅格单元中的单个值求平均值完全没有意义。

对于我所能提供的答案,最好的猜测是使用RASTER EXTRACT()将栅格值分配给SP点对象,然后使用TApply()将值聚合到点中的分组值。您可以使用这些点的坐标来标识单元格位置,或者使用从提取返回的单元格编号(根据下面的示例)。

require(raster)
require(sp)

# Create example data
r <- raster(ncol=500, nrow=500)
  r[] <- runif(ncell(r))
    pts <- sampleRandom(r, 100, sp=TRUE)  

# Add a grouping value to points 
pts@data <- data.frame(ID=rownames(pts@data), group=c( rep(1,25),rep(2,25),
                       rep(3,25),rep(4,25)) )          

# Extract raster values and add to @data slot dataframe. Note, the "cells" 
#   attribute indicates the cell index in the raster. 
pts@data <- data.frame(pts@data, extract(r, pts, cellnumbers=TRUE))
  head(pts@data)

# Use tapply to cal group means  
tapply(pts@data$layer, pts@data$group, FUN=mean)

这篇关于在R中,如何在空间网格正方形上平均空间点数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆