r - 如何创建一个循环来检查一个值是否大于并且在特定的天数内保持大于某个数字?
问题描述
首先,感谢您抽出宝贵时间查看我的问题。
我的问题是关于我正在尝试创建的标志:基本上该标志的工作方式如下: - 如果列 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 列上列出错误,其余列上没有错误。
请让我知道,并感谢您的时间!
解决方案
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
")
推荐阅读
- sql - 显示分组 SUM 占总 SUM 的百分比
- python - 在 Keras 中使用自定义损失函数时的批量大小问题
- c++ - 在 C++ 中有效地右移二进制字符串
- matlab - 生成更大的随机整数 - MATLAB
- c - 使用 strtok,最后一个标记带有行分隔符
- python - 从 tfrecords 解码等级 5 的张量会产生“CopyElementToLargerSlice Unhandled rank: 5”
- c# - 从多个线程 C#.Net 调用时 GetWorkItemAsync 方法异常
- python - 按 F5 使用 VS Code 调试 Python 模块
- python - 匹配和连接两个不一致的 DataFrame
- php - 如何检查另一个表的最后 N 行中是否存在值?