साथ समूह द्वारा मान लें मैं युक्त एक डेटा तालिका कुछ बेसबॉल खिलाड़ियों है: प्रत्येक खिलाड़ी (आईडी द्वारा दिए गए) के लिएसबसेट data.table
library(plyr)
library(data.table)
bdt <- as.data.table(baseball)
, मैं पंक्ति साल के लिए इसी लगाना चाहते हैं जिसमें वे सबसे अधिक खेल खेला। यह प्लीयर में सीधा है:
ddply(baseball, "id", subset, g == max(g))
डेटा.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 की तुलना में तेजी है, सुझाव यह शायद मुहावरेदार नहीं है।
bdt[bdt[, .I[g == max(g)], by = id]$V1]
यह .SD
, जो आपके भाव में अड़चन है निर्माण से बचा जाता है:
वाह, यह धीमा है, लेकिन यदि आप "एसएसडी" के स्थान पर "वर्ष" का उपयोग करते हैं ... मुझे वर्ष के लिए .01, 1.58, 2.3 9 उपयोगकर्ता समय मिल रहा है, क्रमश: एसडी, प्लीयर। – Frank
@ फ्रैंक लेकिन मैं सिर्फ पूरे वर्ष फ्रेम नहीं चाहता हूं। मैं सवाल स्पष्ट कर दूंगा। – hadley