代码之家  ›  专栏  ›  技术社区  ›  Will T-E

Cumsum,但数据点数量最大

  •  1
  • Will T-E  · 技术社区  · 7 年前

    我想创造一个 cumsum() TTR::runSum() 哪里 cumSum() 运行到预先指定数量的数据点,在这些点上,它的行为更像 runSum()

    例如:

    library(TTR)
    data <- rep(1:3,2)
    cumsum <- cumsum(data)
    runSum <- runSum(data, n = 3)
    DesiredResult <- ifelse(is.na(runSum),cumsum,runSum)
    

    有没有一种不需要通过NAs获得资金就可以获得DesiredResult的方法?

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

    这就是 partial=TRUE 参数到 rollapplyr 做这里我们用 sum 还有 sd IQR 。(请注意 sd公司 其中一个值是NA,我们选择IQR,因为它是可以计算标量的扩散度量,尽管在这种情况下它始终为0。)

    library(zoo)
    
    rollapplyr(data, 3, sum, partial = TRUE)
    ## [1] 1 3 6 6 6 6
    
    rollapplyr(data, 3, sd, partial = TRUE)
    ## [1] NA 0.7071068 1.0000000 1.0000000 1.0000000 1.0000000
    
    rollapplyr(data, 3, IQR, partial = TRUE)
    ## [1] 0.0 0.5 1.0 1.0 1.0 1.0
    
        2
  •  1
  •   Julius Vainora    7 年前

    这里有三种选择。

    n <- 3
    
    rowSums(embed(c(rep(0, n - 1), data), n)) # base R
    # [1] 1 3 6 6 6 6
    
    library(TTR)
    runSum(c(rep(0, n - 1), data), n = n)
    # [1] NA NA  1  3  6  6  6  6 # na.omit fixes the beginning
    
    library(zoo)
    rollsum(c(rep(0, n - 1), data), k = 3, align = "right")
    # [1] 1 3 6 6 6 6