Добавьте строку, если следующая строка имеет определенное значение R - PullRequest
0 голосов
/ 02 мая 2018

У меня есть большой набор данных, который в своей короткой версии выглядит так:

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

Я хочу найти все значения больше 5000 в столбце sample_rate и вставить новую строку после каждой строки, подобной этой. Эта новая строка должна содержать нули в остальных столбцах, кроме столбца Время . Для столбца Время в новой строке значение должно быть равно предыдущее значение в столбце Время + 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

Как проще всего решить эту нетривиальную задачу?

1 Ответ

0 голосов
/ 02 мая 2018

Используя dplyr, я фильтрую все те с частотой дискретизации> 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...