سؤال

أحاول تحديد colClasses الخيارات في read.csv الوظيفة في R. في بياناتي ، فإن العمود الأول "Time" هو في الأساس متجه الأحرف بينما تكون بقية الأعمدة رقمية.

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

في الأمر أعلاه ، أريد أن تقرأ R في العمود "Time" كـ "حرف" والباقي على أنه رقمي. على الرغم من أن متغير "البيانات" كان لديه النتيجة الصحيحة بعد اكتمال الأمر ، فقد أعاد R التحذيرات التالية. أتساءل كيف يمكنني إصلاح هذه التحذيرات؟

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

ديريك

هل كانت مفيدة؟

المحلول

يجب أن يكون لاقطاد Colclasses طول مساوٍ لعدد الأعمدة المستوردة. لنفترض راحة من أعمدة مجموعة البيانات الخاصة بك 5:

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

نصائح أخرى

يمكنك تحديد colclasse لأعمدة واحدة فقط.

لذلك في مثالك يجب أن تستخدم:

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

على افتراض أن عمود "الوقت" الخاص بك يحتوي على ملاحظة واحدة على الأقل مع حرف غير رقمي وكل أعمدة أخرى تحتوي فقط على أرقام ، فإن "قراءة. الأعمدة باسم "رقمية". لذلك ، سيكون وضع "stringsasfactors = f" نفس النتيجة مثل تعيين "colclasses" يدويًا ، أي ،

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

إذا كنت ترغب في الرجوع إلى أسماء من الرأس بدلاً من أرقام الأعمدة ، فيمكنك استخدام شيء مثل هذا:

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)

بالنسبة لأعمدة DateTime متعددة بدون رأس ، والكثير من الأعمدة ، على سبيل المثال ، تقع حقول DateTime في العمودان 36 و 38 ، وأريد قراءتها في حقول الأحرف:

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

أنا أعلم أن OP سأل عن utils::read.csv وظيفة ، ولكن اسمحوا لي أن أقدم إجابة لهذه القدوم هنا بحثًا عن كيفية القيام بذلك باستخدام readr::read_csv من Tidyverse.

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

هذا يجب أن يضبط النوع الافتراضي لجميع الأعمدة كما حرف, ، في حين زمن سوف يتم تحليلها على أنها عدد صحيح.

إذا جمعنا ما الذي ساهم به Hendy و Oddysseus ithaca ، فإننا نحصل على نظافة وأكثر عمومية (أي ، قابلة للتكيف؟) من التعليمات البرمجية.

    data <- read.csv("test.csv", head = F, colClasses = c(V36 = "character", V38 = "character"))                        
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top