如何将动物园对象列表转换为数据框?

时间:2019-04-17 03:46:29

标签: r list dataframe time-series zoo

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

我的完整数据集将包含约300口井和40年的数据。每口井都有不同的记录长度,即有些井将有40年的记录,有些井将有5年的记录。对于此示例,我仅使用两口井和一年的数据。

在其他帖子中,我设法将Zoo对象合并在一起,为每个孔创建一列。但是,我希望这些列也包含网站名称。

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

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 个答案:

答案 0 :(得分:0)

怎么样

getattr(COMMANDS, cmd.command, DefaultCommand()).command(irc_c, msg, cmd)

这将从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"属性中提取列名。

PS。带有“特殊”字符的列名通常不是一个好主意,它们需要“反引号”。