计算Xts柱的滚动等级

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

我是一个初学者,我有一个xts对象有1列和10000行,数据确实包含一些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个回答
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)
© www.soinside.com 2019 - 2024. All rights reserved.