Długość trendu - dane panelu
Mam dobrze wyważony zestaw danych panelowych, który zawiera obserwacje NA. Będę używał LOCF i chciałbym wiedzieć, ile kolejnych NA znajduje się w każdym panelu, przed przekazaniem obserwacji do przodu. LOCF to procedura, w której brakujące wartości można „wypełnić” za pomocą „ostatniej obserwacji przeniesionej”. Może to mieć sens w niektórych zastosowaniach szeregów czasowych; być może mamy dane pogodowe w 5-minutowych przyrostach: dobrym odgadnięciem wartości brakującej obserwacji może być obserwacja dokonana 5 minut wcześniej.
Oczywiście, bardziej sensowne jest prowadzenie obserwacji o jedną godzinę do przodu w jednym panelu niż w przypadku przeniesienia tej samej obserwacji do następnego roku w tym samym panelu.
Wiem, że możesz ustawić argument „maxgap” za pomocą zoo :: na.locf, jednak chcę lepiej poznać moje dane. Zobacz prosty przykład:
require(data.table)
set.seed(12345)
### Create a "panel" data set
data <- data.table(id = rep(1:10, each = 10),
date = seq(as.POSIXct('2012-01-01'),
as.POSIXct('2012-01-10'),
by = '1 day'),
x = runif(100))
### Randomly assign NA's to our "x" variable
na <- sample(1:100, size = 52)
data[na, x := NA]
### Calculate the max number of consecutive NA's by group...this is what I want:
### ID Consecutive NA's
# 1 1
# 2 3
# 3 3
# 4 3
# 5 4
# 6 5
# ...
# 10 2
### Count the total number of NA's by group...this is as far as I get:
data[is.na(x), .N, by = id]
Wszystkie rozwiązania są mile widziane, ale preferowane są rozwiązania oparte na danych. plik danych jest duży.