2017-12-11 13 views
0

私はいくつかの観測を排除しようとしているdata.frameを持っています。 out$SUB_AGE0に等しい行をドロップしたいと思います。しかし、私はその条件に基づいて私のDFをサブセット化しようとすると、それはNAout$SUB_AGEの行をNAの行に変換します。私はout$SUB_AGE=0の行を実際には含んでいませんが、ゼロを含む完全なデータセットとまったく同じように動作する以下の出力を提供しました。

# dput the data 
> temp <- dput(droplevels(out[1:12, 1:4])) 
structure(list(SUB_ID = c(5998784L, 6805295L, 318926L, 1270965L, 
1635543L, 4296301L, 1001498L, 2388387L, 2190957L, 4168048L, 318926L, 
4073180L), ORG_ID = c(10861L, 17361L, 10608L, 11099L, 13135L, 
14803L, 12359L, 13151L, 13135L, 17252L, 10608L, 17317L), SUB_AGE = c(36, 
NA, NA, 40, 60, 50, 52, 61, 56, 62, NA, NA), SUB_SEX = c(NA, 
1, 2, 1, 2, 2, 1, 2, 2, NA, 2, 2)), .Names = c("SUB_ID", "ORG_ID", 
"SUB_AGE", "SUB_SEX"), row.names = c(107L, 190L, 242L, 331L, 
361L, 447L, 455L, 591L, 663L, 664L, 731L, 732L), class = "data.frame") 


# table before subsetting 
    SUB_ID ORG_ID SUB_AGE SUB_SEX 
107 5998784 10861  36  NA 
190 6805295 17361  NA  1 
242 318926 10608  NA  2 
331 1270965 11099  40  1 
361 1635543 13135  60  2 
447 4296301 14803  50  2 
455 1001498 12359  52  1 
591 2388387 13151  61  2 
663 2190957 13135  56  2 
664 4168048 17252  62  NA 
731 318926 10608  NA  2 
732 4073180 17317  NA  2 


# code to subset 
temp <- temp[temp$SUB_AGE != 0,] 


# table after subsetting 
     SUB_ID ORG_ID SUB_AGE SUB_SEX 
107 5998784 10861  36  NA 
NA  NA  NA  NA  NA 
NA.1  NA  NA  NA  NA 
331 1270965 11099  40  1 
361 1635543 13135  60  2 
447 4296301 14803  50  2 
455 1001498 12359  52  1 
591 2388387 13151  61  2 
663 2190957 13135  56  2 
664 4168048 17252  62  NA 
NA.2  NA  NA  NA  NA 
NA.3  NA  NA  NA  NA 

は、私がここに欠けているシンプルなものがあると確信していますが、私は私の脳をしぼったと明らかに自分自身をそれを把握するためのキーワードの正しい組み合わせを思い付くことができませんでした。

+0

私は 'subset(temp、temp $ SUB_AGE!= 0)'として実行しました。これらのNA行を削除します。 – seeellayewhy

+0

いいえ、 'SUB_AGE'が' NA'を含むゼロ以外の値を持つ行を保持したいと思います。エラーは、それがすべて '-n '行を作成しているということです。また、iwithと 'temp $ 'の両方を使わずに走らせて、同じものを得ました。それは私の部分の間違ったタイプミスでした。 – seeellayewhy

答えて

3

temp$SUB_AGE != 0を印刷してみてください、問題を理解するには、次の

[1] TRUE NA NA TRUE TRUE TRUE TRUE TRUE TRUE TRUE NA NA 

あなたはtempをサブセットし、このベクトルを使用しているが、その機能はのみTRUE/FALSE値のために働きます。すべての行をNA値に保ちたい場合は、余分な条件を追加することができます:

temp[temp$SUB_AGE != 0 | is.na(temp$SUB_AGE),] 
+0

これはトリック、ありがとう。私はそれはちょっとした回避策だと思うが、うまくいくので私はそれに満足している!それも説明してくれてありがとう。 – seeellayewhy

関連する問題