Зависимое от пути векторное преобразование в R - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть вектор в кадре данных в R, который является временным рядом, который колеблется между 0 и 100. Я хочу создать новый столбец / вектор в R, который будет иметь ряды от 1 до 0. Это будет 1, когда временной ряд упадет ниже 10, и будет оставаться 1, пока не достигнет 80. После этого он вернется к нулю go. Итак, в этой проблеме есть зависимость от пути, которую я хочу решить.

Что-то вроде;

DataFrame %>% mutate(BinaryIndicator = ....)

Я думаю, что рисунок ниже будет самым простым способом показать, чего я хочу достичь. Любая помощь будет с благодарностью.

Вот ссылка на пример того, что я хотел бы создать

enter image description here

Любая помощь высоко ценится.

1 Ответ

0 голосов
/ 03 февраля 2020

Поскольку значение одной строки зависит от значения предыдущей строки (после того, как ее значение обновлено с ее предыдущей строки и т. Д. c), я думаю, что операция скользящего окна является подходящей. zoo делает это хорошо.

dat <- data.frame(x=rep(c(60, 50, 40, 35, 30, 25, 20, 15, 10.2, 9, 2, 3, 9, 40, 72, 81, 90), 2))
dat$binary <- cumsum(zoo::rollapply(dat$x, 2, function(a) {
  if (length(a) < 2) return(0)
  if (a[1] >= 10 && a[2] <  10) return(1)
  if (a[1] <  80 && a[2] >= 80) return(-1)
  return(0)
}, partial = TRUE, align = "right"))
dat
#       x binary
# 1  60.0      0
# 2  50.0      0
# 3  40.0      0
# 4  35.0      0
# 5  30.0      0
# 6  25.0      0
# 7  20.0      0
# 8  15.0      0
# 9  10.2      0
# 10  9.0      1
# 11  2.0      1
# 12  3.0      1
# 13  9.0      1
# 14 40.0      1
# 15 72.0      1
# 16 81.0      0
# 17 90.0      0
# 18 60.0      0
# 19 50.0      0
# 20 40.0      0
# 21 35.0      0
# 22 30.0      0
# 23 25.0      0
# 24 20.0      0
# 25 15.0      0
# 26 10.2      0
# 27  9.0      1
# 28  2.0      1
# 29  3.0      1
# 30  9.0      1
# 31 40.0      1
# 32 72.0      1
# 33 81.0      0
# 34 90.0      0

(Интересно, можно ли несколько упростить внутренний лог c.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...