Мне нужно импортировать файл данных .mat (Matlab) в R и упорядочить его содержимое в виде фрейма данных. Хотя импорт является простым с использованием пакета R.matlab, преобразование в кадр данных показывает, что это сложно, поскольку данные изначально организованы каким-то неудобным способом. Похоже, есть два вложенных списка. Пока я не смог преобразовать его в фрейм данных.R - Помогите преобразовать вложенные списки (?) В data.frame
Вот то, что я до сих пор:
# Download original flux file
oldwd <- getwd()
tmp <- tempdir()
setwd(tmp)
url <- 'https://dl.dropboxusercontent.com/u/27700634/FLUX_DATA.mat'
f <- file.path(tmp, 'FLUX_DATA.mat')
download.file(url, f, method='curl')
setwd(oldwd)
# Read data using package R.matlab
library(R.matlab)
mlab <- readMat(f)
И это структура файла:
> str(mlab)
List of 1
$ DATA:List of 16
..$ : num [1:241, 1] 220 220 220 220 220 ...
..$ : num [1:241, 1] -22 -35.2 -31.4 -20.5 -27 ...
..$ : num [1:241, 1] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
..$ : num [1:241, 1] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
..$ : num [1:241, 1] -29.3 -25.5 -33.6 -36.8 -27.3 ...
..$ : num [1:241, 1] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
..$ : num [1:241, 1] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
..$ : num [1:241, 1] 16.5 16.5 16 15.5 15.8 ...
..$ : num [1:241, 1] 19.7 19.6 19.5 19.3 19.2 ...
..$ : num [1:241, 1] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
..$ : num [1:241, 1] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
..$ : num [1:241, 1] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
..$ : num [1:241, 1] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
..$ : num [1:241, 1] 93.6 93.1 93.6 97.2 97.4 ...
..$ : num [1:241, 1] -0.207 -0.831 -0.687 -0.214 -0.152 ...
..$ :List of 15
.. ..$ : chr [1, 1] "decimal day of year"
.. ..$ : chr [1, 1] "net radiation (W/m2)"
.. ..$ : chr [1, 1] "sensible heat flux (W/m2)"
.. ..$ : chr [1, 1] "latent heat flux (W/m2)"
.. ..$ : chr [1, 1] "ground heat flux (W/m2)"
.. ..$ : chr [1, 1] "net ecosystem CO2 exchange (micromol/m2/s)"
.. ..$ : chr [1, 1] "friction velocity (m/s)"
.. ..$ : chr [1, 1] "air temperature (oC)"
.. ..$ : chr [1, 1] "soil temperature at 2 cm (oC)"
.. ..$ : chr [1, 1] "air pressure (kPa)"
.. ..$ : chr [1, 1] "saturation vapor pressure at z = 3m (kPa)"
.. ..$ : chr [1, 1] "actual vapor pressure at z = 3 m (kPa)"
.. ..$ : chr [1, 1] "specific humidity at z = 3 m (g/kg)"
.. ..$ : chr [1, 1] "Relative Humidity at 3 m)"
.. ..$ : chr [1, 1] "PPFD micromol m-2 s-1"
.. ..- attr(*, "dim")= int [1:3] 15 1 1
.. ..- attr(*, "dimnames")=List of 3
.. .. ..$ : chr [1:15] "DDOY" "Rn" "H" "LE" ...
.. .. ..$ : NULL
.. .. ..$ : NULL
..- attr(*, "dim")= int [1:3] 16 1 1
..- attr(*, "dimnames")=List of 3
.. ..$ : chr [1:16] "DDOY" "Rn" "H" "LE" ...
.. ..$ : NULL
.. ..$ : NULL
- attr(*, "header")=List of 3
..$ description: chr "MATLAB 5.0 MAT-file, Platform: PCWIN, Created on: Tue Nov 28 09:51:53 2006 "
..$ version : chr "5"
..$ endian : chr "little"
Из того, что я узнал до сих пор, есть 15 переменных данных, которые описываемый 16-й переменной. Я могу получить доступ к каждой отдельной переменной, набрав:
mlab$DATA[[1]]
mlab$DATA[[2]]
mlab$DATA[[3]]
, который показывает мне значения «десятичного день года», «чистой радиации», «и разумном теплового потока» - как видно из MLAB $ DATA [[ 16]]. Мне нужно сделать, чтобы преобразовать каждую из этих переменных в столбец фрейма данных, сохранив последний список, mlab $ DATA [[16]], в качестве имен столбцов.
Есть ли у кого-нибудь ключи от того, как этого достичь? Большое спасибо заранее за любое направление.
Потому что ... я не был» t (и до сих пор нет) знакомы с объектами списка, но ваш ответ сделал все это, спасибо большое. Чтобы сделать окончательную структуру еще более удобной для меня, я использовал colnames (dat) <- unlist (dimnames (mlab $ DATA)) [1:15] вместо переноса кадра данных. Еще раз спасибо за вашу помощь. – thiagoveloso