如何将zoo对象列表转换为数据帧?

问题描述 投票:0回答:1

我正在尝试组织我的数据集以进行后续分析(趋势分析,图表等)。数据采用列表的形式,我想将其转换为数据框。

我的完整数据集将包含大约300个井和40年的数据。每口井的记录长度不同,即一些井将有40年的记录,有些井将有5年的记录。对于这个例子,我只使用了两口井和一年的数据。

在其他帖子中,我设法将动物园对象合并在一起,为每个井创建一个列。但是我希望列也包含站点名称。

我注意到日期/时间似乎不在自己的专栏中;我不确定这是否会在以后出现问题。另外值得关注的是我将通过将所有日期/时间值合并在一起而生成的日期/时间值的数量。我想知道是否有比我计划的更好的方式。

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
r list dataframe time-series zoo
1个回答
1
投票

这个怎么样

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。带有“特殊”字符的列名通常不是一个好主意,它们需要“反引号”。

© www.soinside.com 2019 - 2024. All rights reserved.