首页 > 解决方案 > 如何创建一个循环来检查一个值是否大于并且在特定的天数内保持大于某个数字?

问题描述

首先,感谢您抽出宝贵时间查看我的问题。

我的问题是关于我正在尝试创建的标志:基本上该标志的工作方式如下: - 如果列 vals 的值连续 3 天大于 3,我希望标记原始值。我正在尝试使用 ifelse 语句,但是,我只是不知道如何在 R 中编写“连续 3 天保持大于 3”的代码。我已经尝试了多个小时而没有解决方案:/

示例数据可能看起来像这样

Date      Vals
8/1/11     2.5
8/2/11     2.6
8/3/11     1.6
8/4/11     3.6
8/5/11     3.5
8/6/11     3.1
8/7/11     3.8
8/8/11     2.1
8/9/11     1.6
8/10/11    3.1

所以基本上:我会得到一个名为 FLAG 的第三列,它只会在 8/4/11 和 8/5/11 列上列出错误,其余列上没有错误。

请让我知道,并感谢您的时间!

标签: rif-statementdplyr

解决方案


library(zoo)
df$FLAG <- rollapply(na.fill(df$Vals, 0), 3, 
                     function(x) if(all(x > 3)) 'ERROR' 
                                 else 'NO ERROR'
                     , fill = 'NO ERROR'
                     , align = 'left')

df
#        Date Vals     FLAG
#  1:  8/1/11  2.5 NO ERROR
#  2:  8/2/11  2.6 NO ERROR
#  3:  8/3/11  1.6 NO ERROR
#  4:  8/4/11  3.6    ERROR
#  5:  8/5/11  3.5    ERROR
#  6:  8/6/11  3.1 NO ERROR
#  7:  8/7/11  3.8 NO ERROR
#  8:  8/8/11  2.1 NO ERROR
#  9:  8/9/11  1.6 NO ERROR
# 10: 8/10/11  3.1 NO ERROR

使用的数据:

library(data.table)
df <- fread("
Date      Vals
8/1/11     2.5
8/2/11     2.6
8/3/11     1.6
8/4/11     3.6
8/5/11     3.5
8/6/11     3.1
8/7/11     3.8
8/8/11     2.1
8/9/11     1.6
8/10/11    3.1
")

推荐阅读