2010-05-10 10 views
83

में colClasses निर्दिष्ट करना मैं विकल्पों में read.csv फ़ंक्शन में निर्दिष्ट करने का प्रयास कर रहा हूं। मेरे डेटा में, पहला कॉलम "टाइम" मूल रूप से एक वर्ण वेक्टर होता है जबकि शेष कॉलम संख्यात्मक होते हैं।read.csv

data <- read.csv("test.csv", comment.char="" , 
       colClasses=c(time="character", "numeric"), 
       strip.white=FALSE) 

उपरोक्त आदेश में, मैं आर "चरित्र" और संख्यात्मक रूप में बाकी के रूप में "समय" कॉलम में पढ़ने के लिए चाहते हैं। हालांकि, कमांड पूरा होने के बाद "डेटा" चर के पास सही परिणाम था, आर ने निम्नलिखित चेतावनियां वापस कर दीं। मैं सोच रहा हूं कि मैं इन चेतावनियों को कैसे ठीक कर सकता हूं?

Warning messages: 
1: In read.table(file = file, header = header, sep = sep, quote = quote, : 
    not all columns named in 'colClasses' exist 
2: In tmp[i[i > 0L]] <- colClasses : 
    number of items to replace is not a multiple of replacement length 

डेरेक

उत्तर

69

colClasses वेक्टर लंबाई आयातित स्तंभों की संख्या के बराबर होना चाहिए। आपके डेटासेट स्तंभों की बाकी मान 5 हैं:

colClasses=c("character",rep("numeric",5)) 
+7

कोई शायद सीएसवी की पहली पंक्ति को पढ़ने के लिए निम्नलिखित का उपयोग कर सकता है और यह निर्धारित कर सकता है कि कितने कॉलम हैं। स्कैन (सीएसवी, सीपी = ',', क्या = "चरित्र", nlines = 1) – defoo

+22

यह वास्तव में एक गलत जवाब है और मुझे थोड़ी देर के लिए फेंक दिया। सही उत्तर नीचे है। झटका होने की कोशिश नहीं कर रहा था, सिर्फ यह सुनिश्चित करना चाहता था कि यह किसी और के साथ न हो। – Rob

+3

@Rob मेरे मामले में, यह अभी भी सही उत्तर है, जब आपको अन्य चर के वर्ग निर्दिष्ट करने की भी आवश्यकता होती है, और उन्हें स्वचालित रूप से 'read.table' द्वारा पहचाना नहीं जाता है। – tchakravarty

11

मानते हुए अपने 'समय' स्तंभ एक गैर संख्यात्मक चरित्र और अपने सभी अन्य कॉलम के साथ कम से कम एक अवलोकन केवल संख्या, फिर 'read.csv की राशि है डिफॉल्ट 'टाइम' में 'कारक' और बाकी के कॉलम को 'न्यूमेरिक' के रूप में पढ़ना होगा। इसलिए सेट करते समय 'stringsAsFactors = एफ' करने के समान ही परिणाम होगा 'colClasses' मैन्युअल अर्थात,

data <- read.csv('test.csv', stringsAsFactors=F) 
130

आप केवल एक कॉलम के लिए colClasse निर्दिष्ट कर सकते हैं।

तो अपने उदाहरण में आप का उपयोग करना चाहिए:

data <- read.csv('test.csv', colClasses=c("time"="character")) 
+17

यह नहीं कि यह बहुत मायने रखता है, लेकिन मुझे कॉलम नाम उद्धृत किए बिना यह काम करने के लिए मिला। – Hendy

10

आप स्तंभ संख्या के बजाय हैडर से नामों का उल्लेख करना चाहते हैं, तो आप कुछ इस तरह का उपयोग कर सकते हैं:

fname <- "test.csv" 
headset <- read.csv(fname, header = TRUE, nrows = 10) 
classes <- sapply(headset, class) 
classes[names(classes) %in% c("time")] <- "character" 
dataset <- read.csv(fname, header = TRUE, colClasses = classes) 
1

कई के लिए कोई शीर्ष लेख और कॉलम का एक बहुत साथ datetime कॉलम, कहते हैं कि मेरी datetime फ़ील्ड कॉलम 36 और 38 में हैं, और मैं उन्हें चरित्र क्षेत्रों के रूप में में पढ़ा हैं:

data<-read.csv("test.csv", head=FALSE, colClasses=c("V36"="character","V38"="character"))       
संबंधित मुद्दे