3

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

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

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

  first.na last.na
1        2       4
2        7      10

我正在尝试训练自己避免for循环,因为我将在非常大的数据集(按 1e9 项的顺序)上执行此类操作,并且na.omit不是很有帮助。

4

1 回答 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
于 2011-11-02T02:14:21.817 回答