r - 如果下一行具有特定值 R,则添加一行
问题描述
我有一个大数据集,它的简短版本如下所示:
Time L_Diam_x Trigger sample_rate
505381380 -0.9935 3200 4001
505385381 -0.9934 3200 4002
505389383 -0.9934 3200 4001
505393384 -0.9937 3200 4002
505397386 -0.9939 3200 4001
505401387 -0.9938 3200 8000
505409387 -0.9934 3200 4001
我想在sample_rate列中找到所有超过 5000 的值,并在每一行之后插入一个新行。该新行应在除Time列之外的其余列中包含零。对于新行中的Time列,该值应等于Time 列中的先前值 + 4001。因此,最终数据集将如下所示:
Time L_Diam_x Trigger sample_rate
505381380 -0.9935 3200 4001
505385381 -0.9934 3200 4002
505389383 -0.9934 3200 4001
505393384 -0.9937 3200 4002
505397386 -0.9939 3200 4001
505401387 -0.9938 3200 4000
505405387 0 0 4000
505409387 -0.9934 3200 4000
解决这个重要问题的最简单方法是什么?
解决方案
使用dplyr
I 过滤所有采样率 > 5000 的样本,然后将 4001 添加到时间和rbind
. Sample_rate 指定为 4000,因为您没有说明如何处理该列。
library(dplyr)
df %>% filter(sample_rate > 5000) %>% mutate(Time = Time+4001, L_Diam_x = 0, Trigger = 0, sample_rate = 4000) %>% rbind(df) %>% arrange(Time)
# Time L_Diam_x Trigger sample_rate
# 1 505381380 -0.9935 3200 4001
# 2 505385381 -0.9934 3200 4002
# 3 505389383 -0.9934 3200 4001
# 4 505393384 -0.9937 3200 4002
# 5 505397386 -0.9939 3200 4001
# 6 505401387 -0.9938 3200 8000
# 7 505405388 0.0000 0 4000
# 8 505409387 -0.9934 3200 4001
推荐阅读
- php - 如何在 PHP 中运行 Python 脚本而不使用 `exec()`、`system()` ...?
- html - 如何实现缩小的等高图像列
- c# - 如何使用 VLC Control C# 从视频中删除黑条
- kubernetes - Kubernetes 中的 Jfrog Artifactory 高可用设置
- docusignapi - DocuSign Rest API - 使用 CompositeTemplates 后获取信封状态文档
- asp.net-mvc - System.Web.dll 中出现“System.InsufficientExecutionStackException”类型的异常,但在 nopcommerce 3.80 的用户代码中未处理
- java - 使用 Java 8 流对象将列表对象转换为自定义 Map
- avro - AvroData 用架构默认值替换空值
- javascript - 立即停止 Puppeteer 删除文本
- javascript - 使用自动 ID 增量将数据保存在数组中