计算下 n 行满足 R 中的条件
Count next n rows that meets a condition in R
假设我有一个看起来像这样的 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),则 return 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
我认为滚动功能可以做到这一点,但我已经尝试过但不确定如何去做。提前谢谢你
鉴于您的预期输出,我想您的意思是 "in the actual and previous 3 rows"。然后使用一些滚动功能确实可以完成工作:
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
使用 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 )}
(不是很漂亮,明显不如已经发布的 rollsum 答案。)
假设我有一个看起来像这样的 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),则 return 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
我认为滚动功能可以做到这一点,但我已经尝试过但不确定如何去做。提前谢谢你
鉴于您的预期输出,我想您的意思是 "in the actual and previous 3 rows"。然后使用一些滚动功能确实可以完成工作:
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
使用 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 )}
(不是很漂亮,明显不如已经发布的 rollsum 答案。)