代码之家  ›  专栏  ›  技术社区  ›  Denis

rollapply中的“align”参数做什么?

zoo r
  •  0
  • Denis  · 技术社区  · 6 年前

    我想知道 align 参数在 rollapply . 我已看过文件中的描述 ?rollapply (对齐):

    指定结果的索引应为left-还是 与的滚动窗口相比右对齐或居中(默认) 观察。此参数仅在宽度表示宽度时使用。

    alignment and offsets in rollapply

    希望有人能用一些例子更详细地解释这一点。我尝试了一些实验来更好地理解它,但是我不确定当我尝试align=“right”、“left”或“center”时,我的结果是如何改变的。

    0 回复  |  直到 6 年前
        1
  •  2
  •   G. Grothendieck    6 年前

    右对齐。

    x <- 1:10
    y <- rollapply(x, 3, sum, align = "right", fill = NA)
    y
    ## [1] NA NA  6  9 12 15 18 21 24 27
    

    计算如下:

    rollapply(x, 3, function(x) paste(x, collapse = "+"), align = "right", fill = NA)
    
    ## [1] NA       NA       "1+2+3"  "2+3+4"  "3+4+5"  "4+5+6"  "5+6+7" 
    ## [8] "6+7+8"  "7+8+9"  "8+9+10"
    

    用偏移量来指定这一点的等效方法是。返回到当前位置2,这就是位置1 sum

    rollapply(x, list(c(-2, -1, 0)), sum, fill = NA)  # same as align = "right"
    

    居中对齐。

    x <- 1:10
    y <- rollapply(x, 3, sum, align = "center", fill = NA)
    y
    ## [1] NA  6  9 12 15 18 21 24 27 NA
    

    计算如下:

    rollapply(x, 3, function(x) paste(x, collapse = "+"), align = "center", fill = NA)
    ## [1] NA       "1+2+3"  "2+3+4"  "3+4+5"  "4+5+6"  "5+6+7"  "6+7+8" 
    ## [8] "7+8+9"  "8+9+10" NA 
    

    指定这一点的等效方法是通过偏移。即输入要求和的上一个值、当前值和下一个值:

    rollapply(x, list(c(-1, 0, 1)), sum, fill = NA) # same as align = "center"
    

    对于以下情况,它计算结果为y[i]=x[i]+x[i+1]+x[i+2]:

    x <- 1:10
    y <- rollapply(x, 3, sum, align = "left", fill = NA)
    y
    ##  [1]  6  9 12 15 18 21 24 27 NA NA
    

    计算如下:

    rollapply(x, 3, function(x) paste(x, collapse = "+"), align = "left", fill = NA)
    ## [1] "1+2+3"  "2+3+4"  "3+4+5"  "4+5+6"  "5+6+7"  "6+7+8"  "7+8+9" 
    ## [8] "8+9+10" NA       NA      
    

    这也可以用偏移量来指定。即使用当前、下一个和位置后的下一个来馈送 :

    rollapply(x, list(c(0, 1, 2)), sum, fill = NA) # same as align = "left"
    

    注意

    请注意,右对齐和中心对齐可以更简洁地写为:

    y <- rollapplyr(x, 3, sum, fill = NA) # note r on the end to denote right
    y <- rollapply(x, 3, sum, fill = NA) # no align specified so center
    
        2
  •  1
  •   Roland    6 年前

    下面是一个例子:

    library(zoo)
    rollapply(1:10, c(1, 2, 3), sum, align = "right")
    #1
    #2+1
    #3+2+1
    #4
    #5+4
    #6+5+4
    #7
    #8+7
    #9+8+7
    #10
    
    rollapply(1:10, c(1, 2, 3), sum, align = "center")
    #1
    #2+3
    #2+3+4
    #4
    #5+6
    #5+6+7
    #7
    #8+9
    #8+9+10
    #10
    
    rollapply(1:10, c(1, 2, 3), sum, align = "left")
    #1
    #2+3
    #3+4+5
    #4
    #5+6
    #6+7+8
    #7
    #8+9
    #omitted because there are not enough values, see partial
    #10
    

    或者更简单,只有一个数字宽度:

    rollapply(1:10, 3, sum, align = "right", partial = TRUE)
    #[1]  1  3  6  9 12 15 18 21 24 27
    rollapply(1:10, 3, sum, align = "center", partial = TRUE)
    #[1]  3  6  9 12 15 18 21 24 27 19
    rollapply(1:10, 3, sum, align = "left", partial = TRUE)
    #[1]  6  9 12 15 18 21 24 27 19 10