67

data.table何人かの野球選手を含むがあるとします:

library(plyr)
library(data.table)

bdt <- as.data.table(baseball)

各グループ (プレーヤー 'id' で指定) について、ゲームの最大数 'g' に対応する行を選択したいと考えています。これは簡単ですplyr:

ddply(baseball, "id", subset, g == max(g))

に相当するコードはdata.table何ですか?

私は試した:

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

これは機能します:

bdt[, .SD[g == max(g)], by = id] 

しかし、それは よりも 30% 速いだけでありplyr、おそらく慣用的ではないことを示唆しています。

4

1 に答える 1