【问题标题】:Compute Rolling Rank of Xts Column计算 Xts 列的滚动秩
【发布时间】:2018-03-29 02:25:50
【问题描述】:

我是一个初学者,我有一个 1 列和 10000 行的 xts 对象,数据确实包含一些 NA。我试图在同一列的下 4 个值中找到每个值的排名。例如,如果我在 col 1 中有这些值:

01/02/2018  25
12/29/2017  16
12/28/2017  22
12/27/2017  6
12/26/2017  17
12/21/2017  11

我想要这个结果:

01/02/2018  1   (25 is rank 1 of 25,16,22,6)
12/29/2017  3   (16 is rank 3 of 16,22,6,17)
12/28/2017  1   (22 is rank 1 of 22,6,17,11)

我尝试了多种不同的方式使用排名函数,包括:

apply(xts, 2, rank)

这对整个 xts 中的每个值进行排名,而不是在前 4 个值中排名每个值。我似乎无法弄清楚这一点。任何帮助将不胜感激。

【问题讨论】:

    标签: r


    【解决方案1】:

    你可以使用zoo::rollapply:

    library(zoo);
    window <- 4;
    df2 <- as.data.frame(replace(df, 2, rollapply(zoo(
        df[, 2]),
        window, 
        function(x) (window + 1 - rank(x))[1],
        align = "left", fill = NA)));
    df2[complete.cases(df2), ];
    #    V1 V2
    #1 2018-01-02  1
    #2 2017-12-29  3
    #3 2017-12-28  1
    

    df <- read.table(text =
        "01/02/2018  25
    12/29/2017  16
    12/28/2017  22
    12/27/2017  6
    12/26/2017  17
    12/21/2017  11", header = F)
    

    【讨论】:

      猜你喜欢
      • 2012-08-14
      • 2016-02-17
      • 1970-01-01
      • 2017-05-18
      • 2012-02-28
      • 2011-05-07
      • 1970-01-01
      • 2019-02-12
      • 2011-11-25
      相关资源
      最近更新 更多