В следующем примере моя цель - показать годы, в которых последовательные числа в df
, транспонированные в df_new
, меньше, чем threshold
из -1.2
в 5
последовательных экземпляров.Я хочу затем вернуть соответствующие уникальные значения из столбца df_new$year
в качестве результата.Моя проблема связывания результата функции rle()
заключается в том, что длина не соответствует длине df_new$year
, и поэтому я не могу правильно ее проиндексировать.Проблема с функцией rle()
заключается в том, что она не возвращает нули и, следовательно, возвращает только прогоны, по крайней мере, на 1 значение ниже threshold
в k
.Как я могу улучшить этот кусочек кода, чтобы достичь того, что мне нужно?Есть ли способ заставить rle () включить нули в k
, или я пойду с другим подходом?
# Example reproducible df:
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))
library(data.table)
df_t <- t(df)
df_long <- melt(df_t)
df_long$year <- rep(1976:1985, each=nrow(df))
df_new <- data.frame(value=df_long$value,year=df_long$year)
# Threshold values:
threshold = -1.2
consecutiveentries = 5
number <- consecutiveentries-1
# Start of the problem:
k <- rle(df_new$value < threshold)
years <- unique(df_new$year[k$lengths > number])
Текущий результат:
> years
[1] 1976 1978 1979 1980 1982 1984 1985
Что бы я хотелбыть:
> years
[1] 1976 1980 1983 1985