2013-08-22 4 views
8

मुझे पता है कि tablenot the preferred waydata.table के रूप में आवृत्ति तालिका बनाने के लिए है। लेकिन मान लीजिए कि मेरे पास table है, जो भी कारण है, कि मैं data.table में कनवर्ट करना चाहता हूं।तालिका का डेटाटेबल तालिका से डेटा से अलग है

require(data.table) 
tab <- table(1:101) 
DF.tab <- data.frame(tab) 
DT.tab <- data.table(tab) 

data.frame जबकि data.table प्रयास एक स्तंभ के रूप में मूल table वस्तु स्टोर करने के लिए, एक data.frame में table डेटा धर्मान्तरित: data.table रूपांतरण उसी तरह data.frame रूपांतरण करता है काम नहीं करता। (मैं अन्य उदाहरण के बीच n के एक से अधिक मान के लिए tab <- table(1:n) के साथ इस परीक्षण किया है,।)

> str(DF.tab) 
'data.frame': 101 obs. of 2 variables: 
$ Var1: Factor w/ 101 levels "1","2","3","4",..: 1 2 3 4 5 6 7 8 9 10 ... 
$ Freq: int 1 1 1 1 1 1 1 1 1 1 ... 
> str(DT.tab) 
Classes ‘data.table’ and 'data.frame': 101 obs. of 1 variable: 
$ tab: 'table' int [1:101(1d)] 1 1 1 1 1 1 1 1 1 1 ... 
    ..- attr(*, "dimnames")=List of 1 
    .. ..$ : chr "1" "2" "3" "4" ... 
- attr(*, ".internal.selfref")=<externalptr> 

यह भी ध्यान रखें कि जब तक as.data.framedata.frame जैसा ही होता है, as.data.table पूरी तरह से विफल रहता है:

> as.data.table(tab) 
Error in UseMethod("as.data.table") : 
    no applicable method for 'as.data.table' applied to an object of class "table" 

में यदि तालिका पर्याप्त रूप से बड़ी है, तो अनौपचारिक परीक्षण .Dim > 100 सुझाता है), मुझे बहुत अजीब त्रुटियां मिलती हैं, print:

> print(data.table(table(1:101))) 
Error in prettyNum(.Internal(format(x, trim, digits, nsmall, width, 3L, : 
    dims [product 5] do not match the length of object [10] 

ध्यान दें कि print(data.table(table(1:100))) एक त्रुटि नहीं है, लेकिन केवल एक स्तंभ V1 को प्रदर्शित करता है, जबकि print(data.frame(table(1:100)))Var1 और Freq कॉलम शामिल हैं।

data.table(data.frame(...)) से कोई बेहतर कामकाज है? क्या मैं हमेशा table से बचने की कोशिश कर रहा हूं? और print त्रुटि सीधे इसके कारण होती है, या यह कुछ गहरी है?

+3

यह सुंदर पीआर के साथ एक समस्या प्रतीत होता है इनटिंग (कुल डेटा पंक्तियों के दौरान 'data.table' शीर्ष 5 और नीचे 5 पंक्तियों को कैसे प्रिंट करता है> 100) ... – Arun

+0

मुझे लगता है कि समस्या 'आर' आवृत्ति सारणी को एक सरणी के रूप में निहित करती है जहां प्रत्येक अद्वितीय चर यह स्वयं का आयाम है, और वह अद्वितीय चर 'नाम' के रूप में संग्रहीत किया जाता है। –

+1

आपको एक फीचर अनुरोध और एक बग रिपोर्ट सबमिट करनी चाहिए – eddi

उत्तर

6

फ़ंक्शन है जिसे data.frame(tbl-object) कहा जाता है। यह मैट्रिक्स-जैसी टेबल-ऑब्जेक्ट को एक लंबे प्रारूप वाले डेटा ऑब्जेक्ट में परिवर्तित करता है। ऐसा लगता है कि अभी तक data.table.table फ़ंक्शन नहीं है और तर्कसंगत रूप से वहां होना चाहिए और मैं इस बात से सहमत हूं कि इसे मैट्रिक्स से विरासत के बजाय as.data.frame विधि के समान व्यवहार करना चाहिए (इस प्रकार तालिका कैसे होगी आमतौर पर वारिस:

> data.table(matrix(1:10, 2)) 
    V1 V2 V3 V4 V5 
1: 1 3 5 7 9 
2: 2 4 6 8 10 
> data.table(as.table(matrix(1:10, 2))) 
Error in UseMethod("as.data.table") : 
    no applicable method for 'as.data.table' applied to an object of class "table" 
> data.table(as.data.frame(as.table(matrix(1:10, 2)))) 
    Var1 Var2 Freq 
1: A A 1 
2: B A 2 
3: A B 3 
4: B B 4 
5: A C 5 
6: B C 6 
7: A D 7 
8: B D 8 
9: A E 9 
10: B E 10 

मुझे लगता है कि यह एक सुविधा का अनुरोध किया जाना चाहिए और मुझे नहीं लगता कि यह दूसरी समस्या से संबंधित है

आपका दूसरा प्रश्न एक बग की तरह लगता है data.table लेखक सबसे अधिक प्रमुखता से @।। मैथ्यूडॉवल आम तौर पर काफी उत्तरदायी होते हैं, और आपको एक रिपोर्ट जमा करने पर विचार करना चाहिए।

+1

। 'As.data.table.table' विधि उपलब्ध है, यह 2017 में (v1.10.2) में अपडेट होने की संभावना है, या नई 'सरणी' विधि जोड़ दी जाएगी। – jangorecki

+1

जैसा मैंने कहा था।मैट एक अद्भुत रखरखाव और अरुण एक अद्भुत योगदानकर्ता है। बहुत उत्तरदायी और आर के अपने कांटा को विकसित करने और संसाधन में सुधार करने में दिलचस्पी है। मुझे इन तरीकों से अवगत नहीं था और उन्हें सुनकर खुशी हुई। मैंने डेटाटेबल जे-कॉल के भीतर 'टेबल' का उपयोग करने की कोशिश की थी और प्रदर्शन में निराश हो गया था। –

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