【发布时间】: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
我在数据框中有 X 列,并且想要创建 RolPos。 RolPos 列是具有 3 行滚动窗口的正值的滚动计数。有什么帮助我该怎么做?
要使用的数据:
df <- data.frame(x = c(0, 1, -3, -1, 1, -5, 3, -2))
【问题讨论】:
标签: r count rolling-computation
您可以使用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
【讨论】:
您可以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
【讨论】:
我建议使用这种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
【讨论】: