识别NA部分的起始和结束术语

3

假设我有一些在R中的数据,看起来像这样:

c(0.11, NA, NA, NA, 2.76, 3.65, NA, NA, NA, NA, 1.56)

我该如何高效地提取每个“块”中的起始和结束值?如果结果是数据框,我希望它看起来像这样:

``` Start End 1 3 4 2 7 10 3 13 15 ```
  first.na last.na
1        2       4
2        7      10

我正在尝试训练自己避免使用for循环,因为我将在非常大的数据集上进行此类操作(约为1e9项),而na.omit并不太有用。

1个回答

5
也许有一个函数可以完成这项工作,但你可以通过以下方式实现:
> z <- c(0.11, NA, NA, NA, 2.76, 3.65, NA, NA, NA, NA, 6)

> z2 <- diff(is.na(c(0, z, 0)))
> data.frame(first.na = which(z2 == 1), last.na = which(z2 == -1)-1)
  first.na last.na
1        2       4
2        7      10

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接