table教學 - 重新命名欄位r



使用data.table按組進行子集化 (1)

這是快速的data.table方式:

bdt[bdt[, .I[g == max(g)], by = id]$V1]

這樣可以避免構造.SD ,這是表達式中的瓶頸。

編輯:實際上,OP緩慢的主要原因不僅在於它有.SD ,而且它以特定的方式使用它 - 通過調用[.data.table ,目前這有很大的開銷,所以在一個循環中運行它(當一個人執行a)時會累積一個非常大的懲罰。

假設我有一個包含一些棒球運動員的數據表:

library(plyr)
library(data.table)

bdt <- as.data.table(baseball)

對於每個玩家(由id給出),我想找到與他們玩最多遊戲的年份相對應的行。 這在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] 

但它比plyr快30%,這表明它可能不是慣用語。





greatest-n-per-group