Для анализа временных рядов я работаю с данными, которые часто содержат начальные и конечные нулевые элементы.В этом примере 3 ноля в начале и 2 в конце.Я хочу избавиться от этих элементов и отфильтровать содержимое в середине (которое также может содержать нули)
vec <- c(0, 0, 0, 1, 2, 0, 3, 4, 0, 0)
Я сделал это, зацикливая начало и конец и маскируя ненужные элементы..
mask <- rep(TRUE, length(vec))
# from begin
i <- 1
while(vec[i] == 0 && i <= length(vec)) {
mask[i] <- FALSE
i <- i+1
}
# from end
i <- length(vec)
while(i >= 1 && vec[i] == 0) {
mask[i] <- FALSE
i <- i-1
}
cleanvec <- vec[mask]
cleanvec
[1] 1 2 0 3 4
Это работает, но мне интересно, есть ли более эффективный способ сделать это, избегая петель.