R: Как преобразовать кадр данных с несколькими столбцами значений и (едва) нерегулярными координатами в RasterStack или RasterBrick? - PullRequest
0 голосов
/ 29 мая 2018

Я работал с фреймом данных в 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)

сможет преобразовать каждый из столбцов в растровые слои внутри кирпича, но была выдана следующая ошибка (после того, как я преобразовал имена столбцов широты и долготы в 'y' и 'x'):

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

Похоже, что из https://www.rdocumentation.org/packages/raster/versions/2.6-7/topics/rasterFromXYZ кажется, что координаты должны быть равномерно распределены, чтобы эта функция работала.

Есть ли какой-нибудь способ исправить эту проблему?Буду признателен за любую помощь.

PS Я использовал Stack Overflow прежде, чтобы выяснить, но никогда не задавал вопрос напрямую. Если бы я неправильно отформатировал вещи или не предоставил достаточно информации, дайте мне знать.Спасибо!

1 Ответ

0 голосов
/ 30 мая 2018

Вы можете попробовать установить аргумент 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)
...