我在使用r中的栅格包对data.frame进行栅格化时遇到了麻烦。
我的data.frame包含世界海洋的环境数据(温度等)及其坐标(网格0.5*0.5),十进制经度从-90到90,十进制纬度从-180到180。因此,基数包含90*2*2 x 180*2*2 = 360*720 = 259200行,59个冒号(57个变量+ 2个冒号的坐标)。
栅格化后,这是我得到的plot(r)
: http://postimg.org/image/rqocxcbi3/
所以,一个重复的图像,在错误的方向。
我的代码是:FILE_ENV = read.csv('ENV_DATABASE.csv')
coordinates(FILE_ENV) <- ~LON+LAT
proj4string(FILE_ENV3)=CRS("+init=epsg:4326")
FILE_ENV = spTransform(FILE_ENV,CRS("+init=epsg:4326"))
gridded(FILE_ENV) = TRUE
r = raster(FILE_ENV)
plot(r)
有人能看出我在这里错过了什么吗?
感谢编辑:head(FILE_ENV)
lonlat BAT bat_class SLOPE SEDIMENT SST sstrongeabed SstrongUM SST_WIN SAL_SURF sal_seabed…
1 -179.75 89.75 2804 NA 0.14031838 NA NA NA NA NA NA NA NA NA NA NA NA NA NA
2 -179.25 89.75 2941 NA 0.12495525 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
3 -178.75 89.75 3048 NA 0.07784129 NA NA NA NA NA NA NA NA NA NA NA
4 -178.25 89.75 3093 NA 0.03123910 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
5 -177.75 89.75 3109 NA 0.01536359 NA NA NA NA NA NA NA NA NA NA NA
6 -177.25 89.75 3063 NA 0.15619729 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
由于您没有显示head(FILE_ENV)
(我的代码中的d
),因此很难说您应该如何准确地做到这一点。但本质上,你应该能够像下面这样做:
library(raster)
d <- read.csv('ENV_DATABASE.csv')
r <- rasterFromXYZ(d, crs="+proj=longlat +datum=WGS84")
我认为rasterfromXYZ会起作用。也就是说,当使用raster
将事情分解成更小,更明确的块时,它似乎效果最好。似乎构造函数假设你想从你的对象中得到不同的东西,它失去了你的矩阵项的坐标。
这不是最好的做法,但因为你知道你的数据是一个严格的网格,我们可以把条目变成点,然后光栅化它们:
library(raster)
coords <- coordinates(FILE_ENV[,c("LON","LAT")])
spdf <- SpatialPointsDataFrame(coords,data=FILE_ENV)
r <- rasterize(spdf,field='value',raster(nrow=360,ncol=720))
现在r应该包含您的栅格。