Вы можете использовать один из двух подходов:
1) Использование diff
следующим образом:
ifelse(diff(ts) > 0, 'up', ifelse(diff(ts) < 0, 'down', 'none'))
Выход:
Time Series:
Start = 2
End = 10
Frequency = 1
[1] up up up up none down down down down
2) Использование lag
функции из dplyr
пакета:
ifelse(ts > lag(ts), 'up', ifelse(ts < lag(ts), 'down', 'none'))
Выход следующим образом:
Time Series:
Start = 1
End = 10
Frequency = 1
[1] <NA> up up up up none down down down down
Вы можете заменить первый NA, используя по умолчанию в lag
или отдельно.
EDIT: на основе дополнительного выхода желаемого за комментарии ниже, я редактирую ответ:
Вы можете сохранить результат выше через тритон - например, и извлечь исходные значения, которые принадлежат каждому из что 'движется' следующим образом:
newts <- c('up', ifelse(diff(ts) > 0, 'up', ifelse(diff(ts) < 0, 'down', 'none')))
sapply(unique(newts), function(x) ts[newts == x])
Выход заключается в следующем:
$up
[1] 1 2 3 4 5
$none
[1] 5
$down
[1] 4 3 2 1
Эти три списка. Вы можете делать все, что захотите, или комбинировать их с другими структурами данных по желанию.
ПРИМЕЧАНИЕ: Я дождался newts
, поскольку первый элемент является сиротой без перемещения. В зависимости от того, как вы хотите выводить данные, вы можете настроить это значение на свой вкус.
Каков ваш ожидаемый выход? два временных ряда? что вы пробовали до сих пор? –
@ColonelBeauvel ожидаемым выходом будет 3 кадра данных, по одному для каждого результата (затем вверх, затем вниз и без изменений). Я попытался использовать функцию 'if' и функцию' split', но не смог указать следующую строку как условие – youjustreadthis