Angenommen ich eine Datentabelle enthalten, haben einige Baseball-Spieler:Subset von Gruppe mit data.table
library(plyr)
library(data.table)
bdt <- as.data.table(baseball)
Für jeden Spieler (von id gegeben), möchte ich auf das Jahr um die Zeile finden entspricht, in dem sie spielte die meisten Spiele. Dies ist einfach in plyr:
ddply(baseball, "id", subset, g == max(g))
Was ist der entsprechende Code für data.table?
Ich habe versucht:
setkey(bdt, "id")
bdt[g == max(g)] # only one row
bdt[g == max(g), by = id] # Error: 'by' or 'keyby' is supplied but not j
bdt[, .SD[g == max(g)]] # only one row
Dies funktioniert:
bdt[, .SD[g == max(g)], by = id]
Aber es ist nur 30% schneller als plyr ist, ist es wahrscheinlich nicht idiomatischen hindeutet.
Wow, das ist langsam, aber wenn Sie "Jahr" anstelle von ".SD" verwenden ... Ich bekomme .01, 1.58, 2.39 Benutzer Zeit für das Jahr, .SD, plyr, jeweils. – Frank
@Frank aber ich will den ganzen Datenrahmen, nicht nur das Jahr. Ich werde die Frage klären. – hadley