2012-07-27 25 views
12

मेरे पास निम्न नमूना data.table:में एकाधिक स्तंभों के योग data.table

dtb <- data.table(a=sample(1:100,100), b=sample(1:100,100), id=rep(1:10,10)) 

मैं (, ए और बी, हालांकि वे अलग रखा जाना चाहिए) सभी स्तंभों एकीकृत करना चाहते हैं colSums का उपयोग कर आईडी से, उदाहरण के लिए । ऐसा करने का सही तरीका क्या है? निम्नलिखित काम नहीं करता:

dtb[,colSums, by="id"] 

यह सिर्फ एक नमूना है और इसलिए मैं समारोह नाम

उत्तर

24

यह वास्तव में है मैं क्या देख रहा था और पूछे जाने वाले प्रश्न में बताया गया है:

dtb[,lapply(.SD,mean),by="id"] 
+3

+1 ये, आप पूरी तरह से सही हैं, यह निश्चित रूप से बेहतर तरीका है। मैं हमेशा सोचता हूं कि मेरे पास लंबे प्रारूप में सब कुछ होना चाहिए, लेकिन अक्सर, इस मामले में, कंप्यूटेशंस करना अधिक कुशल है। आपको अपना सही जवाब के रूप में चिह्नित करना चाहिए। –

+0

ठीक है अच्छा लगता है, मैं इसे सही उत्तर में बदल दूंगा। – Alex

+0

+1 बीटीडब्ल्यू, इस वाक्यविन्यास को नवीनतम v1.8.2 में अनुकूलित किया गया है। उस तरह 'japp' में' lapply' का उपयोग करने का एक गति जुर्माना होता था, लेकिन अब नहीं। 'Data.table' विकी पॉइंट्स 1 में संशोधन किए गए हैं, और 5 बिंदुओं की आवश्यकता है। –

0

मैं इस मामले में लगता है कि उन सभी को निर्दिष्ट से बचना चाहते हैं मेरी मेज से कॉलम हैं यह सबसे तेजी से करने के लिए है अपने डेटा को लंबे प्रारूप में पहले लाने के लिए और अगले अपने एकत्रीकरण कर (इस SO post में मैथ्यू की टिप्पणी देखें):

library(data.table) 
dtb <- data.table(a=sample(1:100,100), b=sample(1:100,100), id=rep(1:10,10)) 
library(reshape2) 
dt_long <- as.data.table(melt(dtb, id.var="id")) 
dt_long[, sum(value), by=c("id","variable")] 
    id variable V1 
1: 1  a 601 
2: 2  a 440 
3: 3  a 496 
4: 4  a 553 
5: 5  a 444 
6: 6  a 466 
7: 7  a 525 
8: 8  a 553 
9: 9  a 541 
... 
+0

यह बहुत अक्षम लगता है .. क्या प्रति चर एक बार के बजाय आईडी का चयन करने का कोई तरीका नहीं है? – Alex

+0

मैं उलझन में हूं ... आप अक्षम से क्या मतलब है? लिखने के लिए बहुत अधिक कोड है या यह बहुत धीमा है? और प्रति वैरिएबल के बजाय एक बार आईडी का चयन करने का क्या मतलब है? क्या आप प्रत्येक चर और आईडी संयोजन के लिए योग नहीं चाहते थे? –

+0

हाँ, यह सही है। अक्षम मैं मतलब है कि कोड को डेटाफ्रेम के माध्यम से कितनी खोजें। जब तक मैं एक वेक्टर ऑपरेशन के साथ चीजों को कैसे कर रहा है, इस आधार को समझ नहीं पा रहा हूं, आईडी को एक बार देखा जाना चाहिए और फिर स्तंभों में योग को वेक्टर ऑपरेशन के रूप में किया जाता है। जिस तरह से आप प्रस्ताव देते हैं, (आईडी, चर) हर बार देखा जाना चाहिए। मेरी मेज में मेरे पास लगभग 200 कॉलम हैं जिससे इससे कोई फर्क पड़ेगा। नहीं? – Alex

संबंधित मुद्दे