Вычислить значение реверса скорости / количество строк с определенной разностью значений - PullRequest
0 голосов
/ 05 ноября 2018

Я изо всех сил пытаюсь вычислить «скорость разворота стоимости», например, величина изменения значения в пределах определенного диапазона значений (= "Gap").

Пример данных:

a <- c(-30,0,20,23,24,25,26,27,28,29,30,5)
Gap <- 10

Цель:

Рассчитайте количество изменений значения 10, в этом случае решение будет = 4

(1. изменить с -30 на 0, 2. изменить с 0 на 20, 3. изменить с 20, ...., на 30, 4. изменить с 30 на 5)

Любая помощь, как рассчитать это?

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Может быть:

length(unique(cumsum(a %% Gap == 0)))
# [1] 4

Это предполагает, что у вас есть "10s" в данных, например: это не будет работать, если у нас есть:

a <- c(-31,1,21,23,24,25,26,27,28,29,32,5)
length(unique(cumsum(a %% Gap == 0)))
# [1] 1
0 голосов
/ 05 ноября 2018

Под ред. Теперь работает на обоих примерах:

Gap <- 10

value_changes <- function(vec, gap) {
  res <- 0
  retain_min <- retain_max <- vec[1]
  cat("i:", 1, ", vec[i]:", vec[1], ", retain_min:", retain_min, ", retain_max:", retain_max, ", res:", res, "\n")
  for (i in 2:length(vec)) {
    if (abs(vec[i] - retain_min) >= gap || abs(vec[i] - retain_max) >= gap) {
      res <- res + 1
      retain_min <- retain_max <- vec[i]
    }
    if (vec[i] < retain_min) retain_min <- vec[i]
    if (vec[i] > retain_max) retain_max <- vec[i]
    cat("i:", i, ", vec[i]:", vec[i], ", retain_min:", retain_min, ", retain_max:", retain_max, "res:", res, "\n")
  }
  res
}
value_changes(c(5, 25, 17, 7, -2, 12), Gap)
value_changes(c(-30,0,20,23,24,25,26,27,28,29,30,5), Gap)

#i: 1 , vec[i]: 5 , retain_min: 5 , retain_max: 5 , res: 0 
#i: 2 , vec[i]: 25 , retain_min: 25 , retain_max: 25 res: 1 
#i: 3 , vec[i]: 17 , retain_min: 17 , retain_max: 25 res: 1 
#i: 4 , vec[i]: 7 , retain_min: 7 , retain_max: 7 res: 2 
#i: 5 , vec[i]: -2 , retain_min: -2 , retain_max: 7 res: 2 
#i: 6 , vec[i]: 12 , retain_min: 12 , retain_max: 12 res: 3 
#[1] 3
#
#i: 1 , vec[i]: -30 , retain_min: -30 , retain_max: -30 , res: 0 
#i: 2 , vec[i]: 0 , retain_min: 0 , retain_max: 0 res: 1 
#i: 3 , vec[i]: 20 , retain_min: 20 , retain_max: 20 res: 2 
#i: 4 , vec[i]: 23 , retain_min: 20 , retain_max: 23 res: 2 
#i: 5 , vec[i]: 24 , retain_min: 20 , retain_max: 24 res: 2 
#i: 6 , vec[i]: 25 , retain_min: 20 , retain_max: 25 res: 2 
#i: 7 , vec[i]: 26 , retain_min: 20 , retain_max: 26 res: 2 
#i: 8 , vec[i]: 27 , retain_min: 20 , retain_max: 27 res: 2 
#i: 9 , vec[i]: 28 , retain_min: 20 , retain_max: 28 res: 2 
#i: 10 , vec[i]: 29 , retain_min: 20 , retain_max: 29 res: 2 
#i: 11 , vec[i]: 30 , retain_min: 30 , retain_max: 30 res: 3 
#i: 12 , vec[i]: 5 , retain_min: 5 , retain_max: 5 res: 4 
#[1] 4
...