2017-08-23 2 views
3

NAsを無視してNAsをカウントする方法は?最初の部分を除いてベクトル内のNAsをカウントする

temp <- c(NA, NA, 2, 3, NA, NA, 56, NA) 

このベクターのNAsの総数は5であり、NAシーケンスには2つの要素が含まれています。したがって、正解は我々が最初の非NA要素からvectorをサブセットして、論理ベクトルを取得し、sum

sum(is.na(temp[which(!is.na(temp))[1]:length(temp)])) 
#[1] 3 

それとも別のオプションであるを取得するためにis.naを行うことができます。3.

答えて

3

する必要がありますサブセット論理ベクトルのcumsumに基づいて、その後、あなたがrleでこれを行うことができ

sum(is.na(temp[cumsum(!is.na(temp))>0])) 
#[1] 3 
2

上記のようにしてくださいします

with(rle(is.na(temp)), sum(lengths[-1][values[-1]])) 
#[1] 3 

これは、最初に各NA /非NAシーケンスのランレングスを計算することを意味します。次に、NA配列のすべての長さを合計しますが、最初の配列は除外します。第1のシーケンスは、NAシーケンスであってもよく、この場合、それを除外したい。それは非NAシーケンスでもあり得るが、この場合、NAシーケンス長を合計するだけでよいので、除去されても構わない。

関連する問題