簡體   English   中英

在R中,如何在空間網格方格上平均空間點數據

[英]In R, how to average spatial points data over spatial grid squares

管理現在解決問題

我有一組約5萬個點,它們具有坐標和一個與之相關的值。 我希望能夠將點放入網格中,平均所有落入網格方格的點的相關值。 所以我想最終得到一個識別每個網格方塊的對象,並給出網格方格內的平均值。

如果有幫助,我在空間點數據框和空間網格對象中有數據。

提高答案:我肯定已經做了一些搜索,對於問題的初始狀態感到遺憾,我只是設法在我自己的腦海中構建問題; 以前沒有必要把它傳達給別人......

以下是希望更清楚地說明問題的示例數據

##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])))])
}

我現在的問題是,這是最好的方法,還是有更有效的方法?

你的描述充其量是模糊的。 請嘗試優先詢問更具體的答案,並使用代碼說明您已經嘗試過的內容。 平均點數據或單個柵格單元中的單個值絕對沒有意義。

我可以提供的答案的最佳猜測是使用柵格提取()將柵格值分配給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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM