Ich weiß, dass dies mit anderen Paketen erreicht werden kann, aber ich versuche es in data.table
zu tun (wie es scheint am schnellsten für die Gruppierung zu sein).Wie erhält man die Länge der aktuellen Gruppe in data.table Gruppierung?
library(data.table)
dt = data.table(a=c(1,2,2,3))
dt[,length(a),by=a]
Ergebnisse in
a V1
1: 1 1
2: 2 1
3: 3 1
während
df = data.frame(a=c(1,2,2,3))
ddply(df,.(a),summarise,V1=length(a))
produzieren
a V1
1 1 1
2 2 2
3 3 1
, die ein sinnvolleren Ergebnisse sind. Ich frage mich nur, warum data.table
nicht die gleichen Ergebnisse gibt, und wie dies erreicht werden kann.
+1 @jamborta siehe auch [FAQ 2.10] (http: //datatable.r-forge.r-project. org/datatable-faq.pdf) für etwas Hintergrund. Der Grund dafür ist die Effizienz, um zu vermeiden, dass derselbe Gruppenwert durch einen möglicherweise langen Vektor (Zeit und Raum) wiederholt wird. In Ops mit längeren Vektoren wird R Vektoren der Länge 1 sowieso rezyklieren, falls und wenn es benötigt wird. Also '.N' ist der Weg hierher zu gehen. –
Danke Jungs, das ist sehr nützlich. – jamborta