首页 > 解决方案 > 如果下一行具有特定值 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

解决这个重要问题的最简单方法是什么?

标签: rdatasetrowadd

解决方案


使用dplyrI 过滤所有采样率 > 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

推荐阅读