我有一个平衡良好的面板数据集,其中包含 NA 观察结果。我将使用 LOCF,并想知道每个面板中有多少连续的 NA,然后再进行观察。LOCF 是一个过程,其中可以使用“最后一次观察结转”“填充”缺失值。这对一些时间序列应用程序来说是有意义的;也许我们有 5 分钟增量的天气数据:对缺失观测值的良好猜测可能是 5 分钟前进行的观测。
显然,在一个小组中将观察结果提前一小时比在同一个小组中将相同的观察结果提前到下一年更有意义。
我知道您可以使用 zoo::na.locf 设置“maxgap”参数,但是,我想更好地了解我的数据。请看一个简单的例子:
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]
欢迎所有解决方案,但 data.table 解决方案是高度首选的;数据文件很大。