у меня спатрастер
library(terra)
r
class : SpatRaster
dimensions : 6000, 6000, 1 (nrow, ncol, nlyr)
resolution : 0.0008333333, 0.0008333333 (x, y)
extent : 89.99958, 94.99958, 4.999583, 9.999583 (xmin, xmax, ymin, ymax)
coord. ref. : lon/lat WGS 84 (EPSG:4326)
source : memory
name : SSP_2050
min value : 0.0100
max value : 0.2376
Когда я пытаюсь преобразовать его в фрейм данных, я получаю следующую ошибку:
r_df <- terra::as.data.frame(r, xy = T, na.rm = F)
Error in data.frame(..., check.names = FALSE) :
arguments imply differing number of rows: 36000000, 43596000
Почему это происходит?
как это сделать?
я никогда не работал много с terra. лучше всего было бы попробовать с sf::st_as_sf() как это
Что вы получаете с as.array(r).
попробуйте terra::as.data.frame(r, xy = TRUE, na,rm = NA), (поскольку это один слой, NA или TRUE для na.rm будет иметь тот же результат). 36000000 = nrow(r)*ncol(r), а откуда взялось 43596000? не знаю, но он находит путь к тесту data.frame.





Это похоже на ошибку, и здесь не место сообщать об этом. (См. CRAN куда идти)
В любом случае, я не могу воспроизвести это. Можете ли вы создать воспроизводимый пример, который создает эту ошибку? Возможно, вы используете старую версию «терры»? И что это возвращает? length(values(r)). Я предполагаю, что это 43596000 там, где должно быть 36000000. Как был создан ваш r?
library(terra)
terra 1.6.17
r <- rast(ncol=5, nrow=2)
values(r) <- 1:10
r[1:2] <- NA
as.data.frame(r, xy=T, na.rm=T) |> head()
# x y lyr.1
#3 0 45 3
#4 72 45 4
#5 144 45 5
#6 -144 -45 6
#7 -72 -45 7
#8 0 -45 8
Вот обходной путь
p <- as.points(r)
x <- cbind(crds(p), values(p))
head(x)
# x y lyr.1
#1 0 45 3
#2 72 45 4
#3 144 45 5
#4 -144 -45 6
#5 -72 -45 7
#6 0 -45 8
можете ли вы преобразовать свои данные в простой фрейм данных объекта?