Переформатирование массива в фрейм данных - PullRequest
1 голос
/ 04 октября 2019

У меня есть набор данных, который содержит десять лет (3653 дня температур) для 307 глобальных местоположений. Данные настроены как массив (пример ниже), содержащий 3653 значений данных (температуры) для 307 долгот и 307 широт.

my.array = array(1:344291597, dim=c(307, 307, 3653))

Я хочу получить data.frame, который содержит 3653 дня температурызначения вдоль столбцов, с координатами вдоль строк в двух столбцах. Например:

Lon     Lat     01/01/1971     02/01/1971     03/01/1971     04/01/1971
20.5    60.5    -6.5           -7.1           -5.9           -6.3
20.5    61.5    -6.4           -7.2           -6.8           -6.5
20.5    62.5    -7.7           -7.9           -7.3           -7.4

Есть ли решение для этого? Я пробовал разные подходы, но безуспешно.

1 Ответ

2 голосов
/ 04 октября 2019

Я думаю, что это должно работать

my.array = array(1:344291597, dim=c(307, 307, 3653))
#Find locations from array
Locations <- cbind(my.array[,1,1],my.array[1,,1])
#Create new matrix to store temperature values
LocationsData <- matrix(data= NA,nrow = dim(my.array)[1], ncol = dim(my.array)[3])
#Populate new matrix with temperature values 
for (i in 1:dim(my.array)[1]){

    LocationsData[i,] <-as.vector(t(my.array[i,i,]))
}

Desiredoutput <- data.frame(cbind(Locations,LocationsData))
#add correct names
Names(Desiredoutput) <- c("Lon", "Lat", dimnames(my.array)[[3]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...