2017-06-22 10 views
1

調査データセットのリーバを特定する必要があります。このため、私は特定の列から始めて逆算して、連続してNAを数えるデータに別の列を追加したいと思います。逆順でdata.frameの列の連続するNAをカウントします。

hereが説明したように、私はすでに全体のNAを数え、そしてNAの高いカウントがかなり良い指標ですが、私は確かに人々はちょうどアンケートの代わりに、完全脱離の部分をスキップしていないようにしたいと思います。ここで

は、いくつかの例のデータです:

df <- structure(list(f1 = c(3, 3, 1, 2, 3, 2, 2, NA, 2, 3), f2num = c(170, 
NA, 182, 173, 169, NA, NA, NA, 153, 178), f3num = c(105, NA, 
77, 80, 58, NA, NA, NA, 45, 81), f4num = c(2, NA, 0, NA, NA, 
NA, 1, NA, 0, 0), f5num = c(9, NA, 1, NA, NA, NA, 2, NA, 0, 2 
), f6num = c(NA, NA, NA, NA, NA, NA, 0, NA, NA, NA), f7 = c(NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_), f7num = c(NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_ 
), f8num = c(NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_), f9 = c(NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_)), .Names = c("f1", "f2num", "f3num", "f4num", 
"f5num", "f6num", "f7", "f7num", "f8num", "f9"), row.names = c(NA, 
10L), class = "data.frame") 

> df 
    f1 f2num f3num f4num f5num f6num f7 f7num f8num f9 
1 3 170 105  2  9 NA NA NA NA NA 
2 3 NA NA NA NA NA NA NA NA NA 
3 1 182 77  0  1 NA NA NA NA NA 
4 2 173 80 NA NA NA NA NA NA NA 
5 3 169 58 NA NA NA NA NA NA NA 
6 2 NA NA NA NA NA NA NA NA NA 
7 2 NA NA  1  2  0 NA NA NA NA 
8 NA NA NA NA NA NA NA NA NA NA 
9 2 153 45  0  0 NA NA NA NA NA 
10 3 178 81  0  2 NA NA NA NA NA 

は私の期待される出力は次のようになります。this question

> df 
    f1 f2num f3num f4num f5num f6num f7 f7num f8num f9 consNA 
1 3 170 105  2  9 NA NA NA NA NA  5 
2 3 NA NA NA NA NA NA NA NA NA  9 
3 1 182 77  0  1 NA NA NA NA NA  5 
4 2 173 80 NA NA NA NA NA NA NA  7 
5 3 169 58 NA NA NA NA NA NA NA  7 
6 2 NA NA NA NA NA NA NA NA NA  9 
7 2 NA NA  1  2  0 NA NA NA NA  4 
8 NA NA NA NA NA NA NA NA NA NA  10 
9 2 153 45  0  0 NA NA NA NA NA  5 
10 3 178 81  0  2 NA NA NA NA NA  5 

Jthorpeの答えは限り明らかである

t(apply(df,1,function(x)which.min(rev(is.na(x)))-1)) 

    1 2 3 4 5 6 7 8 9 10 
[1,] 5 9 5 7 7 9 4 0 5 5 

として私を得ました私が必要とするものがほとんどですが、すべてがなら動作しません0(行8を参照)。

+0

「NA」のセットが2つある場合はどうなりますか? 「NA NA 2 3 4 NA NA」またはそのようなもの。どちらを数えたいですか? –

+0

自己が定義した点(データセット内の列)から、 '非'の最初の出現まで逆方向に数えたいと思っています。サンプルデータの7行目を参照してください。サンプルデータの場合は、最後の列から開始し、データセット全体を後ろに移動します。 – LAP

答えて

2

これは少し不器用ですが、それは動作します:行ごとに

df$consNA <- apply(df, 1, function(x) sum(cumsum(!is.na(rev(x))) == 0)) 

df$consNA 
#[1] 5 9 5 7 7 9 4 10 5 5 

、私たちはその順序を逆にし、任意の非NAに遭遇するまでNA Sの第1セットを数えます。

関連する問題