Я хотел бы ответить на мой недавний вопрос
У меня есть следующая база данных, и я ищу строки, у которых определенное число последовательных значений превышает определенный порог, например:
В следующем фрейме данных 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