2016-07-14 7 views
0

Gibt es eine idiomatische Methode, um die eindeutigen Schlüssel einer Datentabelle zu erhalten, wenn sie als einzelne Spalte angegeben wird?Abrufen der von einer data.table verwendeten (eindeutigen) Schlüssel

Ich arbeite über eine Reihe von Datensätzen mit jeweils etwa 10 Millionen Zeilen und möchte Funktionsaufrufe/Overhead auf ein Minimum reduzieren. Mit dem unten Spielzeug Beispiel

require(data.table) 
d_test<-data.table(id=c(1,1,2,7,2,3,5), 
        amt=c(100,200,400,600,231,-100,-200), 
        pay=c(-2,rep(1:3,2)), 
        key="id") 

der Ausgang Ich suche bin entspricht, entweder als Vektor oder data.table,

unique(d_test[,.(id)]) oder unique(d_test$id)

das heißt, c(1,2,3,5,7)

+2

Ich denke, der idiomatische Weg könnte 'eindeutig sein (d_test [, key (d_test), mit = FALSE])', aber für den speziellen Fall eines einspaltigen Schlüssels, Ihre Ansätze und Georges (in der Antwort unten) scheint in Ordnung zu sein. Beachten Sie, dass der Standardwert von 'unique.data.table'' 'by = key (x)' ist. Siehe '? Unique.data.table' – Frank

Antwort

3

Ein anderer Weg

k="id" 
d2=unique(d_test, by=k) 
set(d2, j=setdiff(names(d2),k), value=NULL) 
d2 
# id 
#1: 1 
#2: 2 
#3: 3 
#4: 5 
#5: 7 

Dieses einfacher sein wird, wenn #1269: Returning only groups umgesetzt.

+0

Nützlich, um über das offene Ticket zu wissen. – LaplaceKis

+1

Ich verlasse Referenzen, weil github es ermöglicht, das Problem zu abonnieren. Jeder kann über die letztendliche Auflösung auf dem Laufenden sein. Ich stemple meinen Code in solchen Fällen mit Verweis aus, damit Code in Zukunft sauberer aufbereitet werden kann. – jangorecki

-1

Würde so etwas funktionieren?

d_test[,unique(get(key(d_test)))] 
+0

Dies funktioniert nur bei einspaltigen Schlüsseln .. Verschieben zum Löschen. – Frank