我有一个大型数据集,其简短版本如下所示:
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的所有值,并在每行之后插入一个新行。除<列>时间列外,该新行应在其余列中包含零。对于新行中的时间列,该值应等于时间列中的上一个值+ 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
解决这个非平凡问题的最简单方法是什么?
答案 0 :(得分:0)
使用dplyr
我过滤所有带采样率的广告&gt; 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