Как преобразовать список объектов зоопарка в фрейм данных? - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь организовать свой набор данных для последующего анализа (анализ тенденций, построение графиков и т. Д.).Данные представлены в виде списка, и я хотел бы преобразовать его во фрейм данных.

Мой полный набор данных будет содержать около 300 скважин и данные за 40 лет.Каждая скважина имеет различную продолжительность записи, т.е. некоторые скважины будут иметь 40-летнюю историю, а некоторые - 5 лет.В этом примере я использую только две скважины и данные за 1 год.

Из других постов мне удалось объединить объекты зоопарка, создав столбец для каждой скважины.Однако я хотел бы, чтобы столбцы также содержали названия сайтов.

Я отмечаю, что дата / время не отображаются в отдельном столбце;Я не уверен, если это представляет проблему позже.Также вызывает беспокойство количество значений даты / времени, которые я сгенерирую, объединяя все значения даты / времени вместе.Мне интересно, есть ли лучший способ, чем я планировал.

dput(z)

list(structure(c(-3.221, -3.601, -3.321, -2.861, -2.661, -2.491, 
-2.297, -2.373, -2.348, -2.216, -2.569, -2.676), SiteName = "Well..3737 7D Flaxmere", Measurement = "Depth From Land Surface", Units = "m", InterpolationMethod = "Quasi-continuous", DataType = "SimpleTimeSeries", TSType = "StdSeries", class = "zoo", index = structure(c(1515061200L, 
1517484600L, 1519901100L, 1522761900L, 1525177200L, 1528199400L, 
1530619800L, 1533209100L, 1535978400L, 1538994000L, 1541071500L, 
1544693700L), class = c("POSIXct", "POSIXt"), tzone = "UTC")), 
    structure(c(4.30654362318781, 3.08465060629183, 3.69719825206464, 
    4.22951094416319, 4.74166852727183, 5.25868509480613, 5.37266948414152, 
    5.24168682648358, 5.09669530682964, 4.71066298287734, 5.05269565318106, 
    4.74566920516198), SiteName = "Well...222 Comminutor Stn", Measurement = "Depth From Land Surface", Units = "m", InterpolationMethod = "Quasi-continuous", DataType = "SimpleTimeSeries", TSType = "StdSeries", class = "zoo", index = structure(c(1515139200L, 
    1517491200L, 1519898400L, 1522762800L, 1525179600L, 1528186800L, 
    1530528900L, 1533199500L, 1535962200L, 1539082200L, 1541160300L, 
    1544786400L), class = c("POSIXct", "POSIXt"), tzone = "UTC")))

Это то, что я пробовал до сих пор, и оно близко к работе - за исключением того, что у меня нет имен столбцов

test1 <- data.frame(setNames(do.call(cbind, unname(z)), names(z)))

Я бы хотел, чтобы вывод выглядел примерно такэто.

head(test1)


    Date/Time           Well...222 Comminutor Stn       Well..3737 7D Flaxmere
    2018-01-04 10:20:00        -3.221                          NA
    2018-01-05 08:00:00         NA                          4.306544
    2018-02-01 11:30:00        -3.601                          NA
    2018-02-01 13:20:00         NA                          3.084651
    2018-03-01 10:00:00         NA                          3.697198
    2018-03-01 10:45:00        -3.321                          NA

Но в настоящее время это выглядит так

                        X1       X2
2018-01-04 10:20:00 -3.221       NA
2018-01-05 08:00:00     NA 4.306544
2018-02-01 11:30:00 -3.601       NA
2018-02-01 13:20:00     NA 3.084651
2018-03-01 10:00:00     NA 3.697198
2018-03-01 10:45:00 -3.321       NA

1 Ответ

1 голос
/ 17 апреля 2019

Как насчет этого

library(zoo)
Reduce(function(x, y) merge(x, y, all = T), lapply(z, function(x)
    cbind(`Date/Time` = index(x), setNames(data.frame(x), attr(x, "SiteName")))))
#             Date/Time Well..3737 7D Flaxmere Well...222 Comminutor Stn
#1  2018-01-04 10:20:00                 -3.221                        NA
#2  2018-01-05 08:00:00                     NA                  4.306544
#3  2018-02-01 11:30:00                 -3.601                        NA
#4  2018-02-01 13:20:00                     NA                  3.084651
#5  2018-03-01 10:00:00                     NA                  3.697198
#6  2018-03-01 10:45:00                 -3.321                        NA
#7  2018-04-03 13:25:00                 -2.861                        NA
#8  2018-04-03 13:40:00                     NA                  4.229511
#9  2018-05-01 12:20:00                 -2.661                        NA
#10 2018-05-01 13:00:00                     NA                  4.741669
#11 2018-06-05 08:20:00                     NA                  5.258685
#12 2018-06-05 11:50:00                 -2.491                        NA
#13 2018-07-02 10:55:00                     NA                  5.372669
#14 2018-07-03 12:10:00                 -2.297                        NA
#15 2018-08-02 08:45:00                     NA                  5.241687
#16 2018-08-02 11:25:00                 -2.373                        NA
#17 2018-09-03 08:10:00                     NA                  5.096695
#18 2018-09-03 12:40:00                 -2.348                        NA
#19 2018-10-08 10:20:00                 -2.216                        NA
#20 2018-10-09 10:50:00                     NA                  4.710663
#21 2018-11-01 11:25:00                 -2.569                        NA
#22 2018-11-02 12:05:00                     NA                  5.052696
#23 2018-12-13 09:35:00                 -2.676                        NA
#24 2018-12-14 11:20:00                     NA                  4.745669

При этом извлекаются имена столбцов из атрибута "SiteName" объекта zoo.

PS.Имена столбцов со «специальными» символами часто не очень хорошая идея, и они требуют «обратной галочки».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...