Read.csv में colClasses निर्दिष्ट करना


108

मैं आर में फ़ंक्शन के colClassesविकल्पों को निर्दिष्ट करने की कोशिश कर रहा हूं 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

डेरेक

जवाबों:


78

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

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

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

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

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

173

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

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

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

21
ऐसा नहीं है कि यह बहुत मायने रखता है, लेकिन मैंने कॉलम नाम को उद्धृत किए बिना काम करने के लिए यह पाया।
हेन्डी

कोटेड पूर्णांक को चरित्र के रूप में पढ़ने की कोशिश करते समय यह दृष्टिकोण वास्तव में बहुत उपयोगी है। धन्यवाद!
nils-holmberg

14

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

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

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)

4

बिना किसी हेडर वाले कई डेटाइम कॉलम के लिए, और बहुत सारे कॉलम कहते हैं, मेरे डेटाटाइम फ़ील्ड 36 और 38 कॉलम में हैं, और मैं उन्हें चरित्र फ़ील्ड के रूप में पढ़ना चाहता हूं:

data<-read.csv("test.csv", head=FALSE,   colClasses=c("V36"="character","V38"="character"))                        

3

मुझे पता है कि ओपी ने utils::read.csvसमारोह के बारे में पूछा था , लेकिन मुझे उनके लिए एक उत्तर प्रदान करें जो कि यहां आकर खोजते हैं कि यह कैसे readr::read_csvसुव्यवस्थित रूप से उपयोग किया जाए।

read_csv ("test.csv", col_names=FALSE, col_types = cols (.default = "c", time = "i"))

यह सभी स्तंभों के लिए डिफ़ॉल्ट प्रकार को वर्ण के रूप में सेट करना चाहिए , जबकि समय पूर्णांक के रूप में पार्स किया जाएगा।


0

यदि हम गठबंधन करते हैं तो क्या @ हेंडी और @ ओडीसियस इथाका ने योगदान दिया, हमें कोड के क्लीनर और अधिक सामान्य (यानी, अनुकूलनीय?) हिस्सा मिलता है।

    data <- read.csv("test.csv", head = F, colClasses = c(V36 = "character", V38 = "character"))                        
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.