【问题标题】:Generate a table from the last lines of a list of xts objects从 xts 对象列表的最后几行生成一个表
【发布时间】:2012-05-21 22:52:48
【问题描述】:

我有一个 xts 对象列表。我想获得一个 data.frame,其中包含列表每个级别的最后几行。

我的列表如下:

a <- xts(matrix(1:4,2),as.Date("2012-01-01")+0:1)
b <-list(a,a*5)
> b
[[1]]
           [,1] [,2]
2012-01-01    1    3
2012-01-02    2    4

[[2]]
           [,1] [,2]
2012-01-01    5   15
2012-01-02   10   20

我想得到:

[,1] [,2]
2    4
10   20

列表的每一级中的列名都是相同的。

【问题讨论】:

    标签: r xts


    【解决方案1】:

    除了@Henrik 的answer,您还可以使用lapplydo.calllast 的组合:

    do.call(rbind,lapply(b,last))
    

    【讨论】:

    • 这就是我要找的。谢谢。没关系,但我收到了这个警告:Warning message: In rbind(deparse.level, ...) : mismatched types: converting objects to numeric
    • @PLapointe:那是因为您使用整数矩阵构造了 a1:4 是整数向量),但 a*5 创建了一个数字矩阵。 b &lt;- list(a*1,a*5) 将使警告消失。
    • @PLapointe 继 Joshua 的解释之后,如果您真的希望所有内容都是整数:storage.mode(b[[2]])='integer'(使用 as.integer(a*5) 是我的第一个猜测,但这是非常错误的 :-)
    【解决方案2】:

    由于b 是一个列表,您可以使用任何*apply 家庭成员,例如:

    vapply(b, "[", i = 2, rep(0,2))
    

    如果b 中的对象具有不同的行数,则应该可以:

    vapply(b, function(x) x[nrow(x),], rep(0,ncol(b[[1]])))
    

    请注意,在第一个版本中,如果您的对象有更多列,或者您使用第二个示例中的构造,您必须在 rep(0,2) 中调整 2

    请注意,您必须在结果上使用t 才能获得所需的格式:

    t(vapply(b, "[", i = 2, rep(0,2)))
    

    【讨论】:

      猜你喜欢
      • 2020-11-15
      • 2015-01-29
      • 1970-01-01
      • 2013-07-24
      • 2012-06-12
      • 1970-01-01
      • 2014-09-01
      • 2015-08-13
      • 2021-12-29
      相关资源
      最近更新 更多