Ich habe eine ähnliche Frage an: R: data.table : searching on multiple columns AND setting data type, aber diese Frage wurde nicht vollständig beantwortet. Ich habe eine paarweise Tabelle, die konzeptionell wie die folgende aussieht. Die Tabelle ist das Ergebnis der Umwandlung einer Matrix mit sehr großer Entfernung in eine Datentabelle (> 100.000.000 Zeilen), so dass der Vergleich a, b der gleiche wie b, a ist. A und b können jedoch in Spalte V1 oder V2 erscheinen. Ich möchte einfache Auswertungsstatistiken mit dem Abfragestil von data.table berechnen, aber ich habe noch nicht ganz herausgefunden, wie man Schlüssel in jeder Spalte auswählt. Ist das möglich?R Data.table für die Berechnung von zusammenfassenden Statistiken über mehrere Spalten hinweg
Ich habe versucht, Tasten in beide Richtungen, aber das gibt nur die Daten für diese Spalte. Ich habe auch versucht, mit list(), aber das bringt die Kreuzung (verständlicherweise) zurück, ich hoffte auf ein by = key1 | key2, aber kein solches Glück.
> set.seed(123)
>
> #create pairwise data
> a<-data.table(t(combn(3,2)))
> #create column that is equal both ways, 1*2 == 2*1
> dat<-a[,data:=V1*V2]
> dat
V1 V2 data
1: 1 2 2
2: 1 3 3
3: 2 3 6
#The id ==2 is the problem here, the mean should be 4 ((2+6)/2)
> #set keys
> setkey(dat,V1,V2)
>
> #One way data
> dat[,c("MEAN","VAR"):=list(mean(data),var(data)),by=V1]
> dat
V1 V2 data MEAN VAR
1: 1 2 2 2.5 0.5
2: 1 3 3 2.5 0.5
3: 2 3 6 6.0 NA
> #The other way
> dat[,c("MEAN","VAR"):=list(mean(data),var(data)),by=V2]
> dat
V1 V2 data MEAN VAR
1: 1 2 2 2.0 NA
2: 1 3 3 4.5 4.5
3: 2 3 6 4.5 4.5
>
> #The intersect just produces the original data
> dat[,c("MEAN","VAR"):=list(mean(data),var(data)),by=list(V1,V2)]
> dat
V1 V2 data MEAN VAR
1: 1 2 2 2 NA
2: 1 3 3 3 NA
3: 2 3 6 6 NA
>
> #Meaningless but hopefull attempt.
> dat[,c("MEAN","VAR"):=list(mean(data),var(data)),by=V1|V2]
> dat
V1 V2 data MEAN VAR
1: 1 2 2 3.666667 4.333333
2: 1 3 3 3.666667 4.333333
3: 2 3 6 3.666667 4.333333
#The goal is to create a table would look like this (using mean as an example)
ID MEAN
1 2.5
2 4.0
3 4.5
Meine Standard Ideen wäre zu Schleife durch eine dat sein [V1 == x | V2 == x] Aussage, aber ich glaube nicht, ich bin die volle Leistung des data.table Nutzbarmachung um eine einzelne Spalte von IDs mit Mittelwert der var als zusammenfassende Spalten zurückzugeben.
Vielen Dank!
, was genau Ihre erwartete ist Ergebnis hier? – eddi
bearbeitet, um das hoffnungsvolle Ergebnis widerzuspiegeln, das eine einzelne Spalte von IDs mit dem Mittelwert und var für diese ID ist. Danke, dass du zur Klärung beigetragen hast. – bw4sz