2014-03-03 12 views
6

Nachdem ich die neue Funktion von data.table 1.9.2 überprüft habe, bin ich mir nicht ganz sicher über die neue Funktion der Manipulation von NA/NaN/Inf.NA/NaN/Inf in data.table 1.9.2

Die Nachricht:

NA, NaN, + Inf und -Inf gelten heute als verschiedene Werte, in Schlüssel sein kann, können verbunden werden und gruppiert werden können. data.table definiert: NA < NaN < -Inf

Ich weiß nicht, was es durch bedeutet „kann zu verbinden und können gruppiert werden“

DT <- data.table(A=c(NA,NA,1:3), B=c("a",NA,letters[1:3])) 

Jetzt NAs wir haben in beiden Spalte A und B,

Aber ich bin ein wenig verloren, was zu tun ist, und was der Zweck dieser neuen Funktion ist. Könnten Sie ein Beispiel geben, um dies zu veranschaulichen?

Vielen Dank!

Antwort

11

In früheren Versionen von data.tableNA, NaN,Inf konnten Werte im Schlüssel vorhanden sein, aber Sie konnten join nicht verwenden oder Binärscan verwenden, um diese Zeilen konsistent mit anderen Schlüsselwerten auszuwählen.

Siehe Select NA in a data.table in R und data.table subsetting by NaN doesn't work Beispiele für SO Fragen, die sich mit diesen Fragen beschäftigen (und Sie können die Geschichte durch die Antworten verfolgen Anfragen der data.table Projekt Feature)

nun in 1.9.2 (und darüber) solche Dinge werden funktionieren.

# an example data set 
DT <- data.table(A = c(NA,NaN,Inf,Inf,-Inf,NA,NaN,1,2,3), 
       B =letters[1:10], key = 'A') 
# selection using binary search 
DT[.(Inf)] 
#  A B 
# 1: Inf c 
# 2: Inf d 
DT[.(-Inf)] 
#  A B 
# 1: -Inf e 
# note that you need to use the right kind of NA 
DT[.(NA_real_)] 
#  A B 
# 1: NA a 
# 2: NA f 
DT[.(NaN)] 
#  A B 
# 1: NaN b 
# 2: NaN g 
# grouping works 
DT[,.N,by=A] 
#  A N 
# 1: NA 2 
# 2: NaN 2 
# 3: -Inf 1 
# 4: 1 1 
# 5: 2 1 
# 6: 3 1 
# 7: Inf 2 
+0

Das ist großartig! Vielen Dank @mnel! – Bigchao

+0

Es gibt eine kleine Frage, gibt es eine Möglichkeit, "NaN" und "Inf" gleichzeitig mit.() Methode auszuwählen? Vielen Dank! – Bigchao

+1

@ BigChao. Lesen Sie die data.table-Hilfedateien. Genauso würden Sie andere zwei Werte auswählen. – mnel