假设我有一个包含时间序列的数据框,如下所示:
Date value
2000-01-01 00:00:00 4.6
2000-01-01 01:00:00 N/A
2000-01-01 02:00:00 5.3
2000-01-01 03:00:00 6.0
2000-01-01 04:00:00 N/A
2000-01-01 05:00:00 N/A
2000-01-01 06:00:00 N/A
2000-01-01 07:00:00 6.0
我想找到一种有效的方法来计算间隙的大小(连续 N/A 的数量)并将其添加到数据帧的新列中以获得以下结果:
Date value gap_size
2000-01-01 00:00:00 4.6 0
2000-01-01 01:00:00 N/A 1
2000-01-01 02:00:00 5.3 0
2000-01-01 03:00:00 6.0 0
2000-01-01 04:00:00 N/A 3
2000-01-01 05:00:00 N/A 3
2000-01-01 06:00:00 N/A 3
2000-01-01 07:00:00 6.0 0
我的数据框实际上有超过 600 万行,所以我正在寻找计算方面最便宜的方法。请注意,我的时间序列在整个数据集(1 小时)上是等间隔的。
你可以尝试使用rle
在这种情况下生成游程长度。首先,使用以下方法将值列转换为逻辑值:is.na
并申请rle
它提供输入向量的不同值的游程长度。在本例中,两个类别是 TRUE 和 FALSE,您正在计算它们运行的时间。那么你可以rep
通过游程长度来引用它以获得您正在寻找的输出。
x = c(1,2,4,NA,NA,6,NA,19,NA,NA)
res = rle(is.na(x))
rep(res$values*res$lengths,res$lengths)
#> [1] 0 0 0 2 2 0 1 0 2 2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)