Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对满足R中条件的下n行进行计数_R_Rolling Computation - Fatal编程技术网

对满足R中条件的下n行进行计数

对满足R中条件的下n行进行计数,r,rolling-computation,R,Rolling Computation,假设我有一个像这样的df ID X_Value 1 40 2 13 3 75 4 83 5 64 6 43 7 74 8 45 9 54 10 84 所以我想做的是,做一个滚动函数,如果在实际的和最后4行中,有2个或更多的值大于X(本例中为70),那么返回1,否则返回0 因此,输出将如下所示: ID X_Value Next_4_2 1 40 0 2

假设我有一个像这样的df

ID    X_Value
1      40
2      13
3      75
4      83
5      64
6      43
7      74
8      45
9      54
10     84
所以我想做的是,做一个滚动函数,如果在实际的和最后4行中,有2个或更多的值大于X(本例中为70),那么返回1,否则返回0

因此,输出将如下所示:

ID    X_Value  Next_4_2
1      40        0
2      13        0
3      75        0
4      83        1
5      64        1
6      43        1
7      24        1
8      45        0
9      74        0
10     84        1

我认为这将是可能的滚动功能,但我已经尝试过,不知道如何做到这一点。提前感谢您

鉴于您的预期输出,我想您的意思是“在实际和前3行中”。然后使用一些滚动函数确实可以完成以下工作:

library(zoo)
thr1 <- 70
thr2 <- 2
last <- 3 + 1
df$Next_4_2 <- 1 * (rollsum(df$X_Value > thr1, last, align = "right", fill = 0) >= thr2)
df
#    ID X_Value Next_4_2
# 1   1      40        0
# 2   2      13        0
# 3   3      75        0
# 4   4      83        1
# 5   5      64        1
# 6   6      43        1
# 7   7      74        1
# 8   8      45        0
# 9   9      54        0
# 10 10      84        1
图书馆(动物园)

thr1鉴于您的预期输出,我想您的意思是“在实际和前3行中”。然后使用一些滚动函数确实可以完成以下工作:

library(zoo)
thr1 <- 70
thr2 <- 2
last <- 3 + 1
df$Next_4_2 <- 1 * (rollsum(df$X_Value > thr1, last, align = "right", fill = 0) >= thr2)
df
#    ID X_Value Next_4_2
# 1   1      40        0
# 2   2      13        0
# 3   3      75        0
# 4   4      83        1
# 5   5      64        1
# 6   6      43        1
# 7   7      74        1
# 8   8      45        0
# 9   9      54        0
# 10 10      84        1
图书馆(动物园)

thr1使用
max(1,i-3)
的索引可能是代码中唯一值得记住的部分。当真正需要for循环时,我可能会在后续构造中提供帮助

dat$X_Next_4_2 <- integer( length(dat$X_Value) )
dat$ X_Next_4_2[1]=0
for (i in 2:length(dat$X_Value) ){ 
          dat$ X_Next_4_2[i]= 
            ( sum(dat$X_Value[i: (max(0, i-4) )] >=70) >=2 )}
dat$X\u Next\u 4\u 2=70)>=2)}

(不是很漂亮,明显不如已经发布的rollsum答案。)

使用
max(1,i-3)
的索引可能是代码中唯一值得记住的部分。当真正需要for循环时,我可能会在后续构造中提供帮助

dat$X_Next_4_2 <- integer( length(dat$X_Value) )
dat$ X_Next_4_2[1]=0
for (i in 2:length(dat$X_Value) ){ 
          dat$ X_Next_4_2[i]= 
            ( sum(dat$X_Value[i: (max(0, i-4) )] >=70) >=2 )}
dat$X\u Next\u 4\u 2=70)>=2)}
(不是很漂亮,明显不如已经发布的rollsum答案。)