如何从r中的数据框创建栅格?

Posted

技术标签:

【中文标题】如何从r中的数据框创建栅格?【英文标题】:How to create a raster from a data frame in r? 【发布时间】:2013-10-28 04:48:47 【问题描述】:

我有一个数据框,其中为笛卡尔坐标 (x, y) 指定了值 (l),如下面的最小工作示例所示。

set.seed(2013)
df <- data.frame( x = rep( 0:1, each=2 ),
                  y = rep( 0:1,  2),
                  l = rnorm( 4 ))

df
#   x y           l
# 1 0 0 -0.09202453
# 2 0 1  0.78901912
# 3 1 0 -0.66744232
# 4 1 1  1.36061149

我想使用 raster 包创建一个光栅,但是我阅读文档并没有发现一种简单的方法来以我拥有的形式将数据加载到光栅单元中。我想出了几种使用 for 循环的方法,但我怀疑我缺少一种更直接的方法。

【问题讨论】:

【参考方案1】:

存在一个更简单的解决方案

 library(raster)
 dfr <- rasterFromXYZ(df)  #Convert first two columns as lon-lat and third as value                
 plot(dfr)
 dfr                  
 class       : RasterLayer 
 dimensions  : 2, 2, 4  (nrow, ncol, ncell)
 resolution  : 1, 1  (x, y)
 extent      : -0.5, 1.5, -0.5, 1.5  (xmin, xmax, ymin, ymax)
 coord. ref. : NA 
 data source : in memory
 names       : l 
 values      : -2.311813, 0.921186  (min, max)

此外,您可以指定 CRS 字符串。详细讨论可here.

【讨论】:

如果出现错误应该怎么办:Error in rasterFromXYZ() : x cell sizes are not regular?我相信它来了,因为我必须改变点的随机分布,而且我不知道如何进行【参考方案2】:

这是一种方法,通过SpatialPixelsDataFrame

library(raster)
# create spatial points data frame
spg <- df
coordinates(spg) <- ~ x + y
# coerce to SpatialPixelsDataFrame
gridded(spg) <- TRUE
# coerce to raster
rasterDF <- raster(spg)
rasterDF
# class       : RasterLayer 
# dimensions  : 2, 2, 4  (nrow, ncol, ncell)
# resolution  : 1, 1  (x, y)
# extent      : -0.5, 1.5, -0.5, 1.5  (xmin, xmax, ymin, ymax)
# coord. ref. : NA 
# data source : in memory
# names       : l 
# values      : -0.6674423, 1.360611  (min, max)

help('raster') 描述了许多从不同类的对象创建栅格的方法。

【讨论】:

下面的答案更简洁,可能计算效率更高。 @Gregory 请重新考虑哪个是正确答案!【参考方案3】:

更新这个对应于@zubergu 关于光栅化不规则数据。

所以我根据下面的链接改编的答案可能更容易理解:

library(raster)
library(rasterize)

# Suppose you have a dataframe like this
lon <- runif(20, -180, 180)
lat <- runif(20, -90, 90)
vals <- rnorm(20)
df <- data.frame(lon, lat, vals)

# will need to rename colnames for raster
colnames(df) <- c('x', 'y', 'vals')

# create a raster object
r_obj <- raster(xmn=-180, xmx=180, ymn=-90, ymx=90, resolution=c(5,5))

# use rasterize to create desired raster
r_data <- rasterize(x=df[, 1:2], # lon-lat data
                    y=r_obj, # raster object
                    field=df[, 3], # vals to fill raster with
                    fun=mean) # aggregate function

plot(r_data)

原始回复:

对于那些喜欢@yuliaUU 希望将不规则数据转换为栅格的人,请参阅@RobertH 的回答here。

【讨论】:

以上是关于如何从r中的数据框创建栅格?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 R 中的 rasterbrick 对象创建长格式数据框

r 由两个不同栅格确定的单元格中的栅格砖总和值,如何加快计算速度

根据 R 中的文件名读取栅格子集

如何从 R 中的数据帧创建具有多个参数的函数列表?

R:如何从该列表中的所有数据框中删除行?

R中的多栅格随机森林