R:如何将具有多个值列和(几乎)不规则坐标的数据帧转换为RasterStack或RasterBrick?

时间:2018-05-29 20:25:58

标签: r dataframe raster

我一直在处理R中的数据框,它有一个坐标列(其值几乎不规则地间隔,因为我必须将它们从这一组中的分秒格式转换为小数:http://www.arcgis.com/home/item.html?id=5771199a57cc4c29ad9791022acd7f74)和列与每个坐标关联的值,如下所示:

Latitude Longitude Elevation MAT MWMT MCMT   TD  MAP MSP AHM  SHM DD_0  DD5 DD_18 DD18 NFFD
54.99285 -129.9792        -2 6.8 14.4 -1.7 16.1 2473 696 6.8 20.6  283 1384  4100   30  246
54.99285 -129.9708        10 6.7 14.4 -1.8 16.1 2456 691 6.8 20.8  287 1383  4109   30  245
54.99285 -129.9625         5 6.8 14.4 -1.8 16.2 2431 686 6.9 21.0  286 1392  4097   31  246

# ... and so on.

由此,我想构建一个对应于每列的RasterBrick图层。我最初认为,我的数据框命名为' clim_df':

clim_brick <- rasterFromXYZ(clim_df, crs = NA)

可以将每个列转换为砖块中的栅格图层,但抛出了以下错误(在我将纬度和经度列名称转换为&#39; y&#39;和&#39; x& #39):

Error in rasterFromXYZ(clim_df) : x cell sizes are not regular

https://www.rdocumentation.org/packages/raster/versions/2.6-7/topics/rasterFromXYZ开始,似乎坐标必须均匀分布才能使此功能正常工作。

有没有办法解决这个问题?任何帮助将不胜感激。

P.S。我之前使用Stack Overflow来解决问题,但从未直接问过问题。如果我没有正确格式化,或者我没有提供足够的信息,请告诉我。谢谢!

1 个答案:

答案 0 :(得分:0)

您可以尝试将digits参数设置为较低的数字:

# Create a sample raster:
r <- raster(nrow = 10, ncol = 10, xmn = 0, xmx = 10, ymn = 0, ymx = 10, crs = NA)
r[] <- runif(100)
xyz <- rasterToPoints(r)

# Add a small amount of error to the coordinates:
xyz[, 1:2] <- xyz[, 1:2] + as.matrix(expand.grid(xerror = runif(10, -1e-4, 1e-4), yerror = runif(10, -1e-4, 1e-4)))

# Try to convert back to raster:
rasterFromXYZ(xyz)
# Error in rasterFromXYZ(xyz) : x cell sizes are not regular

# Try again with a lower value of `digits`:
rasterFromXYZ(xyz, digits = 3)
# class       : RasterLayer 
# dimensions  : 10, 10, 100  (nrow, ncol, ncell)
# resolution  : 0.9998915, 0.9998748  (x, y)
# extent      : -2.843587e-05, 9.998886, 0.001149737, 9.999898  (xmin, xmax, ymin, ymax)
# coord. ref. : NA 
# data source : in memory
# names       : layer 
# values      : 0.007020388, 0.9953495  (min, max)