R滚动正计数

问题描述

enter image description here

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

要使用的数据:

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

解决方法

我建议这种values = gmail_count[1][0] replaced = values.decode("utf-8").replace(" ",",") 方法具有对正值进行计数的功能:

slider

输出:

library(slider)
library(dplyr)
#Data
df <- data.frame(x=c(0,1,-3,-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))
,

您可以cbind落后x,然后rowSums

n <- length(x)
rowSums(cbind(x,c(0,x[1:(n-1)]),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,-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