【问题标题】:R rolling count of positive valuesR 正值的滚动计数
【发布时间】:2020-12-21 13:11:12
【问题描述】:

我在数据框中有 X 列,并且想要创建 RolPos。 RolPos 列是具有 3 行滚动窗口的正值的滚动计数。有什么帮助我该怎么做?

要使用的数据:

df <- data.frame(x = c(0, 1, -3, -1, 1, -5, 3, -2))

【问题讨论】:

    标签: r count rolling-computation


    【解决方案1】:

    您可以使用runner。有关更多案例,请参阅文档和小插曲。

    library(runner)
    library(dplyr)
    
    df <- data.frame(x = c(0, 1, -3, -1, 1, -5, 3, -2))
    
    df %>%
      mutate(
        RolPos = runner(
          x = df$x,
          f = function(x) {
            sum(x > 0)  
          },
          k = 3
        )    
      )
    
    # x RolPos
    # 1  0      0
    # 2  1      1
    # 3 -3      1
    # 4 -1      1
    # 5  1      1
    # 6 -5      1
    # 7  3      2
    # 8 -2      1
    

    【讨论】:

      【解决方案2】:

      您可以cbind 落后的x 然后再制造rowSums

      n <- length(x)
      rowSums(cbind(x, c(0, x[1:(n-1)]), c(0, 0, x[1:(n-2)])) > 0)
      #[1] 0 1 1 1 1 1 2 1
      

      【讨论】:

        【解决方案3】:

        我建议使用这种slider 方法来计算正值:

        library(slider)
        library(dplyr)
        #Data
        df <- data.frame(x=c(0,1,-3,-1,1,-5,3,-2))
        #Function
        getpos <- function(x) 
        {
          y <- length(which(x>0))
          return(y)
        }
        # Rolling by group
        df %>% 
          mutate(rolling = slide_dbl(x, getpos, .before = 2, .complete = FALSE))
        

        输出:

           x rolling
        1  0       0
        2  1       1
        3 -3       1
        4 -1       1
        5  1       1
        6 -5       1
        7  3       2
        8 -2       1
        

        【讨论】:

          猜你喜欢
          • 2015-03-07
          • 1970-01-01
          • 2016-07-31
          • 2019-12-29
          • 1970-01-01
          • 2020-11-28
          • 2017-11-13
          • 2021-07-03
          • 1970-01-01
          相关资源
          最近更新 更多