تحديد colclasses في read.csv
سؤال
أحاول تحديد 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"))