Ошибка при конвертации растра в dataframe

у меня спатрастер

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

Почему это происходит?

можете ли вы преобразовать свои данные в простой фрейм данных объекта?

D.J 08.11.2022 12:37

как это сделать?

89_Simple 08.11.2022 12:42

я никогда не работал много с terra. лучше всего было бы попробовать с sf::st_as_sf() как это

D.J 08.11.2022 12:53

Что вы получаете с as.array(r).

Chris 08.11.2022 13:33

попробуйте terra::as.data.frame(r, xy = TRUE, na,rm = NA), (поскольку это один слой, NA или TRUE для na.rm будет иметь тот же результат). 36000000 = nrow(r)*ncol(r), а откуда взялось 43596000? не знаю, но он находит путь к тесту data.frame.

Chris 08.11.2022 14:39
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это похоже на ошибку, и здесь не место сообщать об этом. (См. 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

Другие вопросы по теме