Возвращать строки, в которых последовательные значения соответствуют критерию - включать значения в предыдущих строках - PullRequest
0 голосов
/ 21 января 2019

Я хотел бы ответить на мой недавний вопрос

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

В следующем фрейме данных df. Я хотел бы вернуть вектор result, который указывает, какие строки соответствуют следующему критерию: как минимум 5 последовательных значений consecutiveentries в этой строке ниже, чем threshold -1.2.

set.seed(125)

df <- data.frame(V1=rnorm(10,-1.5,.5),
                 V2=rnorm(10,-1.5,.5),
                 V3=rnorm(10,-1.5,.5),
                 V4=rnorm(10,-1.5,.5),
                 V5=rnorm(10,-1.5,.5),
                 V6=rnorm(10,-1.5,.5),
                 V7=rnorm(10,-1.5,.5),
                 V8=rnorm(10,-1.5,.5),
                 V9=rnorm(10,-1.5,.5),
                 V10=rnorm(10,-1.5,.5))
rownames(df) <- c(seq(1976,1985,1))

threshold = -1.2
consecutiveentries = 5
number <- consecutiveentries-1

result <- as.numeric(names(which(apply(df, 1, function(x) with(rle(x < threshold), any(lengths[values] > number))))))

result
[1] 1985

Теперь я хотел бы сделать еще один шаг. Я хотел бы проверить 5 последовательных чисел consecutiveentries без ограничения конца строки. Другими словами, если в предыдущей строке есть значения ниже threshold - например, 5 значений ниже, чем threshold -1,2 в конце строки 1976 года, а 2 первых значения ниже threshold в начале строки 1977 г., тогда я хотел бы найти решение для трех вариантов. Либо верните имя второй строки, где 5 последовательных значений в двух строках соответствуют критериям как result2, либо имя первой строки как result1. Наконец, верните оба значения как result3.

Результаты будут следующими:

result1
    [1] 1976 1980 1983 1985
result2
    [1] 1977 1981 1984 1985
result3
    [1] 1976 1977 1980 1981 1983 1984 1985
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...