Конвертировать 3d матрицу в фрейм данных - PullRequest
0 голосов
/ 03 марта 2019

У меня есть трехмерная матрица с размерами 9x3x12 (просто образец).Значения этой матрицы представляют собой температуры, зарегистрированные на разных широтах (3), долготах (9) и временных отметках (12).

С другой стороны, у меня есть векторы широты, долготы и времени.Как ... lat = [13, 15 ...] lon = [100, 105, 109, 111 .....] timestamp = ["1992061000" "1992061100" "1992061200" "1992061300" "1992061400" ....]

Мое намерение состоит в том, чтобы создать фрейм данных, который имеет строки 9x3x12, где каждая строка соответствует одному значению температуры и имеет четыре столбца, а именно: широта, долгота, метка времени и температура.

Может кто-нибудь предложить оптимальный способ сделать это без слишком большого количества циклов.Одним из способов было бы перебрать векторы и матрицы после создания пустого информационного кадра, но я боюсь, что это не так уж и оптимально.

1 Ответ

0 голосов
/ 03 марта 2019

Вы можете использовать expand.grid() для комбинации измерений и as.vector для получения данных в виде вектора.

Обратите внимание на порядок измерений!

dim1 <- c('a', 'b')
dim2 <- c('a', 'b', 'c')
dim3 <- c('a', 'b', 'c', 'd')

data <- array(1:24, c(2,3,4), dimnames = list(dim1, dim2, dim3))
data

cbind(expand.grid(dim1,  dim2, dim3), val = as.vector(data))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...