2014-03-24 1 views
7

Ist das 'sortierte' Attribut Teil der offiziellen data.table-API?data.table: Bypass-Setkey bei Verwendung der monotonen Transformation einer Schlüsselvariablen

Ich mache häufig Dinge wie eine Woche/Monat/Quartal/Jahr Variable aus einer Datumsvariablen abzuleiten, die natürlich eine monotone Transformation ist. Ich mache dann Dinge mit einer dieser monoton abgeleiteten Variablen.

Ich frage mich, ob es sicher ist, meine Datumsvariable direkt durch den Namen der Woche/Monat/etc zu ersetzen. Variablen im sortierten Attribut und haben Dinge richtig funktionieren? das heißt die unten sicher zu tun:

library(data.table) 
library(lubridate) 
DT <- data.table(day=as.Date(c('2006-01-30', '2006-01-31', '2006-02-01', '2006-02-02')), 
       d=1:4, key='day') 
DT[, month := floor_date(day, unit='month')] 
# is this safe? 
attr(DT, 'sorted') <- 'month' 

ich konnte nicht herausfinden, ob es einige andere zugrunde liegenden Datenstrukturen waren, die in der Tabelle verweisen, die Probleme mit dieser Technik verursachen könnten.

+0

Natürlich ist die Datensortierungsprüfung immer noch O (n), oder? – James

Antwort

3

Ja, ich verwende diesen Trick die ganze Zeit, wenn ich sicher bin, dass die Daten sortiert, sondern verwenden setattr stattdessen eine Kopie zu vermeiden:

setattr(DT, 'sorted', 'month') 

Wenn Sie auf den Code von setkeyv Sie schauen‘ Ich sehe genau, was es macht - sortiert die Daten und setzt dann das Attribut "Sortiert".