计算Xts列的滚动等级

时间:2018-03-29 02:25:50

标签: r

我是初学者,我有一个xts对象有1列和10000行,数据确实包含一些NA' s。我试图在同一列中的下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个值中的每个值进行排名。我似乎无法解决这个问题。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

您可以使用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)