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%,這表明它可能不是慣用語。