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.

questionAnswers(2)

yourAnswerToTheQuestion