2016-06-08 10 views
5

मैं कुछ विश्लेषणों को पूरा करने के लिए data.table पैकेज का उपयोग कर रहा हूं। मेरे द्वारा उठाए जा रहे चरणों में से एक को कुल आंकड़े प्राप्त करने के लिए by = फ़ंक्शन का उपयोग करना शामिल है। हालांकि, कुल by सबसेट में अद्वितीय परिणामों पर समेकित की गणना की जानी चाहिए। मैं unique का उपयोग कर रहा हूं और यह सुनिश्चित करने के लिए कि प्रत्येक by समूह में विशिष्ट रिकॉर्ड होते हैं। थोड़ा नीचे की तरह कुछ:आर के डेटाटेबल में, डेटाटेबल की कुंजी को एसएसडी का उपयोग करके संदर्भित सबसेट में संरक्षित कैसे किया जाता है?

dt_new <- dt_old[,uFunc_MyFunction(x = unique(.SD)),by = grouping_var] 

मैंने देखा है कि .SD पर कुंजी dt_old के लिए कुंजी सेट और by = बयान के आधार पर भिन्न लग रहा था। जाहिर है, इस पर असर पड़ रहा था कि मेरे परिणामस्वरूप सबसेट अद्वितीय थे या नहीं।

मैं कुछ स्पष्टता प्राप्त करना चाहता था, इसलिए मैंने नीचे लिखा था।

library(data.table) 
set.seed(1554) 
dt_example <- data.table(id = 1:50, 
         site = sample(x = c("A","B","C"), 
             size = 50, 
             replace = TRUE, 
             prob = c(0.4,0.4,0.2)), 
         group = sample(x = c("Eta","Mu","Omicron","Psi"), 
             size = 50, 
             replace = TRUE), 
         team = sample(x = 1:3, 
             size = 50, 
             replace = TRUE, 
             prob = c(0.2,0.3,0.5))) 

setkey(x = dt_example, 
     group, 
     team) 

> dt_example[,as.list(key(.SD)),by = site] 
    site V1 V2 
1: B group team 
2: A group team 
3: C group team 

setkey(x = dt_example, 
     site, 
     group, 
     team) 

> dt_example[,as.list(key(.SD)),by = site] 
Empty data.table (0 rows) of 1 col: site 

क्या मैं समझने की कोशिश कर रहा हूँ क्यों, पहले संस्करण में, .SD के लिए महत्वपूर्ण अनुरूप है, जबकि, दूसरे संस्करण में, .SD सभी में कोई कुंजी पड़ा है। मुझे लगता है कि इस तथ्य के साथ कुछ करना है कि by = कॉलम सीधे .SD में शामिल नहीं है, जो कुंजी तोड़ रहा है, लेकिन मैं अपने तर्क की पुष्टि करना चाहता था।

तो, मेरा प्रश्न यह है: डेटा तालिका, .SD का सबसेट क्यों है, जब कोई कॉलम जिसमें मूल डेटा तालिका की कुंजी शामिल है, by समूह चर के रूप में उपयोग किया जाता है?

+1

के लिए शायद है। – eddi

+0

@eddi एक एफआर क्या है? – TARehman

+0

एफआर = फ़ीचर अनुरोध – Jaap

उत्तर

3

इस मामले में, site, group, team द्वारा क्रमबद्ध होने के बाद, site द्वारा समूहित करते समय, group, team के लिए कुंजी को बनाए रखा जा सकता है क्योंकि ऑर्डर बनाए रखा जाएगा। सबसे आसान जवाब यह है कि हम इस मामले को याद कर चुके हैं। क्या आप इस पोस्ट के सिर्फ एक लिंक के साथ कोई समस्या दर्ज कर सकते हैं?

आसपास के काम के रूप में, आप कॉलम निर्दिष्ट करने के लिए डेटा.tables के लिए unique विधि में by तर्क का उपयोग कर सकते हैं।

और जैसा कि डेविड ने बताया कि हर समूह पर unique(.SD) का उपयोग कर अनावश्यक लगता है, लेकिन यह है कि यह सवाल वास्तव में सिर्फ एक एफआर है एक और प्र

+0

मैं क्षणिक रूप से एक मुद्दा लॉग करूंगा। और मैं सहमत हूं कि 'अद्वितीय (एसडी) 'असामान्य उपयोग केस है। मैं वास्तव में यह भी "निश्चित" होने की उम्मीद नहीं करता - बस हुड के नीचे क्या हुआ उत्सुक था। – TARehman

+1

1736 के रूप में गिथब पर दायर की गई। Https://github.com/Rdatatable/data.table/issues/1736 – TARehman

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