আপনার ফ্যাক্টর ব্যবহার করা উচিত। হ্যাঁ তারা ব্যাথা হতে পারে, কিন্তু আমার তত্ত্ব যে কারণে তারা এর ব্যথা করছি 90% কারণ হয় read.table
এবং read.csv
, যুক্তি stringsAsFactors = TRUE
ডিফল্টরূপে (এবং সবচেয়ে ব্যবহারকারীদের এই তনিমা মিস্)। আমি বলছি এগুলি দরকারী কারণ lme4 ব্যবহারের মতো মডেল ফিটিং প্যাকেজগুলি এবং বিভিন্ন কারণে মডেলগুলিকে ফিট করে এবং বিপরীতে ব্যবহারের ধরণ নির্ধারণ করে factors এবং গ্রাফিং প্যাকেজগুলি এগুলি দ্বারা গোষ্ঠীভুক্ত করে। ggplot
এবং বেশিরভাগ মডেল ফিটিং ফাংশনগুলি চরিত্রের ভেক্টরকে উপাদানগুলির জন্য বাধ্য করে, ফলে ফলাফলটি একই। তবে, আপনি আপনার কোডে সতর্কতা দিয়ে শেষ করেছেন:
lm(Petal.Length ~ -1 + Species, data=iris)
iris.alt <- iris
iris.alt$Species <- as.character(iris.alt$Species)
lm(Petal.Length ~ -1 + Species, data=iris.alt)
সতর্কতা বার্তা: এতে model.matrix.default(mt, mf, contrasts)
:
পরিবর্তনশীল Species
a এ রূপান্তরিতfactor
একটি ছদ্মবেশী জিনিস পুরো drop=TRUE
বিট। ভেক্টরগুলিতে এটি ডেটাতে নেই এমন কারণগুলির স্তরগুলি সরাতে ভাল কাজ করে। উদাহরণ স্বরূপ:
s <- iris$Species
s[s == 'setosa', drop=TRUE]
s[s == 'setosa', drop=FALSE]
তবে এর সাথে data.frame
, এর আচরণটি [.data.frame()
আলাদা this এই ইমেলটি দেখুন বা ?"[.data.frame"
। এটি ব্যবহার drop=TRUE
করা data.frame
আপনার কল্পনা মতো কাজ করে না:
x <- subset(iris, Species == 'setosa', drop=TRUE)
x$Species
ভাগ্যক্রমে আপনি droplevels()
একটি পৃথক ফ্যাক্টরের জন্য বা কোনও ফ্যাক্টরের প্রতিটি ফ্যাক্টরের জন্য data.frame
(আর 2.12 সাল থেকে) অব্যবহৃত ফ্যাক্টর স্তরগুলি সহজেই ফেলে দিতে পারেন :
x <- subset(iris, Species == 'setosa')
levels(x$Species)
x <- droplevels(x)
levels(x$Species)
ggplot
কিংবদন্তি পেতে আপনি যে স্তরগুলি বেছে নিয়েছেন তা এটি কীভাবে রাখবেন This
অভ্যন্তরীণভাবে factor
গুলি হ'ল একটি বিশিষ্ট স্তরের অক্ষর ভেক্টর (দেখুন attributes(iris$Species)
এবং class(attributes(iris$Species)$levels)
) এর সাথে পূর্ণসংখ্যা , যা পরিষ্কার। যদি আপনাকে কোনও স্তরের নাম পরিবর্তন করতে হয় (এবং আপনি চরিত্রের স্ট্রিং ব্যবহার করছিলেন), এটি অনেক কম দক্ষ অপারেশন হবে। এবং আমি স্তরের নামগুলি অনেকগুলি পরিবর্তন করি, বিশেষত ggplot
কিংবদন্তিদের জন্য । যদি আপনি চরিত্রের ভেক্টরগুলির সাথে ভুয়া ফ্যাক্টর তৈরি করেন, তবে ঝুঁকি রয়েছে যে আপনি কেবল একটি উপাদান পরিবর্তন করবেন এবং দুর্ঘটনাক্রমে একটি পৃথক নতুন স্তর তৈরি করবেন।