亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

帶data.table的一個組的子集

帶data.table的一個組的子集

翻閱古今 2019-06-10 17:17:37
帶data.table的一個組的子集假設我有一個包含一些棒球運動員的數據表: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 rowbdt[g == max(g), by = id]   # Error: 'by' or 'keyby' is supplied but not jbdt[, .SD[g == max(g)]] # only one row這樣做是可行的:bdt[, .SD[g == max(g)], by = id]但它只比plyr快30%,說明它可能不是慣用的。
查看完整描述

1 回答

?
素胚勾勒不出你

TA貢獻1827條經驗 獲得超9個贊

這是快車data.table途徑:

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

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

編輯:實際上,OP慢的主要原因不僅僅是.SD但是它以一種特殊的方式使用它-通過調用[.data.table,此時它的開銷很大,因此在循環中運行它(當您執行by)累積了很大的懲罰。


查看完整回答
反對 回復 2019-06-10
  • 1 回答
  • 0 關注
  • 440 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號