রিড সিএসভিতে কলক্লাসগুলি নির্দিষ্ট করা হচ্ছে


108

আমি আর-তে ফাংশনটিতে colClassesবিকল্পগুলি উল্লেখ করার চেষ্টা করছি read.csvmy আমার তথ্য অনুসারে, প্রথম কলামটি "সময়" মূলত একটি চরিত্রের ভেক্টর এবং বাকী কলামগুলি সংখ্যাসূচক থাকে।

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

কলক্লাস ভেক্টরের আমদানি কলামগুলির সংখ্যার সমান দৈর্ঘ্য থাকতে হবে। ধরুন আপনার বাকী ডেটাসেট কলামগুলি 5:

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

7
সিএসভির প্রথম লাইনটি পড়তে এবং কয়টি কলাম রয়েছে তা নির্ধারণ করতে সম্ভবত কেউ নিম্নলিখিতটি ব্যবহার করতে পারেন। স্ক্যান (সিএসভি, সেপ = ',', কি = "চরিত্র", এনলাইনস = 1)
ডিফু করুন

34
এটি আসলে একটি ভুল উত্তর এবং আমাকে কিছুক্ষণের জন্য ফেলে দিয়েছে। সঠিক উত্তর নীচে। বোকা হওয়ার চেষ্টা না করে কেবল এটি নিশ্চিত করতে চেয়েছিলেন যে এটি অন্য কারও সাথে না ঘটে।
রব

3
@ রব আমার ক্ষেত্রে, এটি এখনও সঠিক উত্তর, যখন আপনাকে অন্যান্য ভেরিয়েবলের ক্লাসও নির্দিষ্ট করতে হবে এবং সেগুলি স্বয়ংক্রিয়ভাবে এর দ্বারা স্বীকৃত হয় না read.table
tchakravarty

173

আপনি কেবল একটি কলামের জন্য কলক্ল্যাস নির্দিষ্ট করতে পারেন।

সুতরাং আপনার উদাহরণে আপনার ব্যবহার করা উচিত:

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

21
এটি যে খুব বেশি গুরুত্বপূর্ণ তা নয়, তবে আমি কলামের নাম উদ্ধৃত না করে এটি কাজ করতে পেলাম।
হেন্ডি

চরিত্র হিসাবে উদ্ধৃত পূর্ণসংখ্যার পড়ার চেষ্টা করার সময় এই পদ্ধতিরটি আসলে খুব কার্যকর। ধন্যবাদ!
নীল-হলমার্গ

14

আপনার 'সময়' কলামটিতে একটি অ-সংখ্যাযুক্ত চরিত্রের সাথে কমপক্ষে একটি পর্যবেক্ষণ রয়েছে এবং আপনার সমস্ত অন্যান্য কলামগুলিতে কেবল সংখ্যা রয়েছে, তবে 'রিড সিএসভি'র ডিফল্টটি' সময় 'এ' ফ্যাক্টর 'হিসাবে পড়তে হবে এবং বাকী সমস্ত অংশ 'সংখ্যাসূচক' হিসাবে কলামগুলি। অতএব 'স্ট্রিংসএফ্যাক্টরস = এফ' সেট করার ফলে ম্যানুয়ালি 'কলক্লাস' সেট করার মতোই ফলাফল হবে,

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"))                        
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.