如何光栅化而不是在 r 中获取重复信息
How to rasterise and not to get duplicate information in r
我在使用 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)
有人能看到我在上面 missing/screwing 吗?
谢谢
编辑:
head(FILE_ENV)
LON LAT BAT BAT_CLASSE SLOPE SEDIMENT SST SST_SEAFLOOR SST_SUM SST_WIN SAL_SURF SAL_SEAFLOOR...
1 -179.75 89.75 2804 NA 0.14031838 NA NA NA NA NA NA NA
2 -179.25 89.75 2941 NA 0.12495525 NA NA NA NA NA NA NA
3 -178.75 89.75 3048 NA 0.07784129 NA NA NA NA NA NA NA
4 -178.25 89.75 3093 NA 0.03123910 NA NA NA NA NA NA NA
5 -177.75 89.75 3109 NA 0.01536359 NA NA NA NA NA NA NA
6 -177.25 89.75 3063 NA 0.15619729 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 应该包含您的光栅。
我在使用 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)
有人能看到我在上面 missing/screwing 吗?
谢谢
编辑:
head(FILE_ENV)
LON LAT BAT BAT_CLASSE SLOPE SEDIMENT SST SST_SEAFLOOR SST_SUM SST_WIN SAL_SURF SAL_SEAFLOOR...
1 -179.75 89.75 2804 NA 0.14031838 NA NA NA NA NA NA NA
2 -179.25 89.75 2941 NA 0.12495525 NA NA NA NA NA NA NA
3 -178.75 89.75 3048 NA 0.07784129 NA NA NA NA NA NA NA
4 -178.25 89.75 3093 NA 0.03123910 NA NA NA NA NA NA NA
5 -177.75 89.75 3109 NA 0.01536359 NA NA NA NA NA NA NA
6 -177.25 89.75 3063 NA 0.15619729 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 应该包含您的光栅。