2016-12-14 13 views
1

NA値に関しては、data.framedata.tableローサブセット化が異なることに気付きました。結果とR data.table行サブセット動作 - NA値

DF <- data.frame(COL1 = c(1, 2, NA)) 

DF[DF$COL1 == 1, ] 
DF[DF$COL1 != 1, ] 

DT <- data.table::data.table(COL1 = c(1, 2, NA)) 
DT[COL1 == 1, ] 
DT[COL1 != 1, ] 

コード:

クリーンコード

> DF <- data.frame(COL1 = c(1, 2, NA)) 
> DF[DF$COL1 == 1, ] 
[1] 1 NA 
> DF[DF$COL1 != 1, ] 
[1] 2 NA 
> DT <- data.table::data.table(COL1 = c(1, 2, NA)) 
> DT[COL1 == 1, ] 
    COL1 
1: 1 
> DT[COL1 != 1, ] 
    COL1 
1: 2 

は、そのための特別な理由がありますか? iの議論の下にヘルプファイル、?data.tableから

おかげ

+0

いいえ、それを扱う異なる方法 –

+0

デュープリンクの他に、ここでさらに議論があります:http://stackoverflow.com/questions/16239153/dtx-and-dtx-treat-na-in-x -inconsistently – Frank

+0

ああ、ありがとう。重複して申し訳ありません。 –

答えて

1

、:

整数および論理ベクターは、それらが論理NAを除く[.data.frameで行うのと同じように動作は次のように扱われますFALSE。

data.frameにおいて、NAはNAとして扱われる。

+0

よろしくお願いいたします。あなたがそれについての議論に出くわしたら、分かち合ってください。 –

+0

'data.frame'は常にNA行をもたらします。 'data.table'は決して持ちません。 NAは「情報なし」と解釈される可能性があるため、それに対処する方法は多数あります。両方は私に少し矛盾しているようです。 'data.frame'では、' COL1!= 1'でサブセットを作成すると、値が1である行は除外され、残りの行はすべて保持されます。しかし、私が 'COL1 == 1 'を使ってサブセットを作ると、それは値1の行を持ち、値が1でない行はわかりません。 –

関連する問題