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 に答える