2012-12-11 8 views
7

पर किसी ऑब्जेक्ट से data.table क्लास से छुटकारा पाने/निकालने का सबसे सुरक्षित तरीका क्या है, इसे वापस डेटा.फ्रेम में बदलना?सुरक्षित रूप से डेटा.फ्रेम को डेटा.फ्रेम

मैं पूछता हूँ क्योंकि मैं स्क्रिप्ट जो निम्नलिखित कोड पर निर्भर करता है का उपयोग कर रहा:

newcol.index <- ncol(my.data) +1 
my.data[,newcol.index] <- 3 
colnames(my.data)[newcol.index] <- "test" 

data.table संकुल जाहिरा तौर पर इस पसंद नहीं करता है, लेकिन यह वर्ग data.frame की वस्तुओं का उपयोग कर जुर्माना काम करते हैं।

+1

यह डेटा.फ्रेम पर भी काम नहीं करता है। 'डीएफ <- डेटा.फ्रेम (ए = 1: 2, बी = 1: 2); उपनाम (डीएफ) [3] <- 'z'' त्रुटि देता है *' उपनामों में त्रुटि <-' ('* tmp *', value = c ("a", "b", "हैलो")): 'नाम' विशेषता [3] वही लंबाई होनी चाहिए जैसे वेक्टर [2] * – mnel

+0

'डेटा.table' – Michael

उत्तर

11

as.data.frame डेटाटेबल्स के लिए विधि संभवतः उपयोग करने के लिए सबसे सुरक्षित कार्य है। (यह वास्तव में क्या करता है यह देखने के लिए getAnywhere("as.data.frame.data.table") लिखकर देखें।)

library(data.table) 
DT <- data.table(a=1:4, b=letters[c(1,1,2,2)], key="a") 

class(as.data.frame(DT)) ## OR: as(X, "data.frame") 
# [1] "data.frame" 
+2

में जो काम नहीं कर रहा था, उसका वर्णन करने के लिए पोस्ट को संपादित किया गया है इन दिनों हमारे पास' setDF' है –

4

आप data.table को अपनी स्क्रिप्ट कन्वर्ट करने के लिए तैयार हैं, तो आप संदर्भ द्वारा आवंटित करने के लिए उपयोग := उपयोग कर सकते हैं, यह स्वचालित रूप से (ncol(youdata)+1)th स्तंभ के लिए आवंटित करेगा , और आप फ़ंक्शन के एलएचएस में नामों के एक चरित्र वेक्टर को पास कर सकते हैं। यह संदर्भ द्वारा असाइन करेगा, इसलिए कोई प्रतिलिपि नहीं!

DT <- data.table(a = 1, b = 2) 

DT[,'test' := 3] 


DT 
    a b test 
1: 1 2 3 

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

  • कोई संबंधित समस्या नहीं^_^