2016-12-14 8 views
1

Ich habe festgestellt, dass sich data.frame und data.table Zeilenunterset- zungen unterscheiden, wenn es um NA-Werte geht.R data.table - Zeilen-Subsetting-Verhalten - NA-Werte

Sauberer Code:

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, ] 

Code mit Ergebnissen:

> 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 

Gibt es besondere Gründe dafür?

Dank

+0

Nein, nur verschiedene Möglichkeiten, damit umzugehen –

+0

Neben dem dupe Link gibt es auch mehr Diskussion hier: http://stackoverflow.com/questions/16239153/dtx-and-dtx-treat-na-in-x -inkonsistent – Frank

+0

Oh, danke. Entschuldigung für das Duplikat. –

Antwort

1

aus der Hilfedatei, ?data.table unter der Diskussion von i:

integer und logischen Vektoren, die die gleiche Art, wie sie außer logischem NAs tun arbeiten in [.data.frame werden behandelt, als FALSCH.

In data.frame werden NAs als NA behandelt.

+0

Ok, danke. Wenn Sie darüber diskutieren, teilen Sie es bitte mit. –

+0

Scheint, dass 'data.frame' immer NA-Zeilen einbringt; 'data.table' bringt nie. Da NA als "keine Information" interpretiert werden kann, gibt es viele Möglichkeiten, damit umzugehen. Beides scheint mir etwas widersprüchlich zu sein. In 'data.frame', wenn ich mit 'COL1! = 1' untergeordnet bin, schließt es Zeilen aus, bei denen der Wert bekanntermaßen 1 ist und alle anderen beibehalten werden. Wenn ich jedoch mit 'COL1 == 1 'untergeordnet bin, bringt es mir Zeilen mit dem Wert 1 und Zeilen, deren Wert nicht bekannt ist, 1 zu sein oder nicht. –