R 正值的滚动计数

R rolling count of positive values

我在数据框中有 X 列,想创建 RolPos。 RolPos 列是具有 3 行滚动 window 的正值的滚动计数。有什么帮助吗?

要使用的数据:

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

我建议使用这种 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

你可以 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

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