我有一个名为gridmap
的光栅文件,以UTM投影,类:SpatialGridDataFrame,如下所示:
Object of class SpatialGridDataFrame
Coordinates:
min max
[1,] 415.0 545.5
[2,] 6371.5 6493.0
Is projected: TRUE
proj4string :
[+proj=utm +ellps=WGS84 +datum=WGS84 +zone=30 +units=km +towgs84=0,0,0]
Grid attributes:
cellcentre.offset cellsize cells.dim
1 415.25 0.5 261
2 6371.75 0.5 243
Data attributes:
values
Min. : 1
1st Qu.:15856
Median :31712
Mean :31712
3rd Qu.:47568
Max. :63423
我还有一个数据框,其中包含与这些坐标相关的坐标和值(V1)。某些坐标可以有多个值。
DF <- data.frame(
Lat = c(6384.705, 6384.701, 6384.698, 6384.698, 6384.691, 6384.687)
Lon = c(439.7384, 439.7385, 439.7386, 439.7387, 439.7389, 439.7390)
V1 = c(34, 0.006, 76, 34, 777, 0.0000348)
)
我想要做的是为我的栅格中的每个GRID-CELL取平均值V1,而不是数据帧中的每个离散坐标,并创建一个具有网格单元格值,栅格坐标值的数据帧和意思是V1。我可以弄清楚如何将位置叠加到gridmap
上,以使用此代码获取每个观察的网格单元ID:
coords <- data.frame(cbind(DF$Lon, DF$Lat))
coords <- SpatialPointsDataFrame(coords, data = data.frame(DF), proj4string = CRS(projUTM))
siteSpo <- over(x=coords, y=gridmap)
DF$siteID <- siteSpo$values
但我无法弄清楚下一步是为每个单独的网格单元ID平均每个值并创建一个新的SpatialGridDataFrame,它具有所有平均网格单元格值,包括我没有数据的0。
答案 0 :(得分:1)
我首先会制作一个RasterLayer
对象
library(raster)
#r <- raster("gridmap file")
由于我们没有您的文件,以下是一个示例(您也可以r <- raster(gridmap)
)。
r <- raster(ncol=261, nrow=243, xmn=415, xmx=545.5, ymn=6371.5, ymx=6493.0)
values(r) <- 1:ncell(r)
现在:
df <- data.frame(
y = c(6372, 6378, 6384, 6384, 6485, 6487),
x = c(419, 429, 439, 439, 539, 500),
V1 = c(34, 0.006, 76, 34, 777, 0.0000348)
)
df <- aggregate(df[, 'V1', drop=FALSE], df[,2:1], mean)
df$grid <- extract(r, df[,c('x', 'y')])
df
# x y V1 grid
#1 419 6372 3.40e+01 63171
#2 429 6378 6.00e-03 60059
#3 439 6384 5.50e+01 56947
#4 539 6485 7.77e+02 4425
#5 500 6487 3.48e-05 3303