আর এর সাথে উপাদানগুলির সাথে ডিল করা বেশ অদ্ভুত কাজ, আমাকে অবশ্যই স্বীকার করতে হবে ... ফ্যাক্টর স্তরগুলি পুনরায় সাজানোর সময় আপনি অন্তর্নিহিত সংখ্যাসমূহের মানগুলিকে পুনরায় অর্ডার করছেন না। এখানে একটি সামান্য বিক্ষোভ:
> numbers = 1:4
> letters = factor(letters[1:4])
> dtf <- data.frame(numbers, letters)
> dtf
numbers letters
1 1 a
2 2 b
3 3 c
4 4 d
> sapply(dtf, class)
numbers letters
"integer" "factor"
এখন, আপনি যদি এই উপাদানটিকে সংখ্যায় রূপান্তর করেন তবে আপনি পাবেন:
# return underlying numerical values
1> with(dtf, as.numeric(letters))
[1] 1 2 3 4
# change levels
1> levels(dtf$letters) <- letters[4:1]
1> dtf
numbers letters
1 1 d
2 2 c
3 3 b
4 4 a
# return numerical values once again
1> with(dtf, as.numeric(letters))
[1] 1 2 3 4
আপনি দেখতে পাচ্ছেন ... স্তর পরিবর্তন করে আপনি কেবলমাত্র স্তর পরিবর্তন করেন (কে বলবে, আহ?), সংখ্যাসূচক মানগুলি নয়! তবে, আপনি যখন factor
জনাথন চ্যাং প্রস্তাবিত হিসাবে ফাংশনটি ব্যবহার করেন, তখন অন্যরকম কিছু ঘটে যায়: আপনি নিজেই সংখ্যাসূচক মান পরিবর্তন করেন।
আপনি আবারও ত্রুটি পেয়ে যাচ্ছেন 'কারণ আপনার হয়ে গেছে levels
এবং এরপরে এটি পুনরায় উত্তোলনের চেষ্টা করুন factor
। এটা করবেন না !!! ব্যবহার করবেন নাlevels
বা আপনি জিনিসগুলি জগাখিচুড়ি করবেন (যদি না আপনি জানেন যে ঠিক কী করছেন)।
একটি লিলের পরামর্শ: আপনার অবজেক্টের নাম আর এর অবজেক্ট হিসাবে অভিন্ন নাম দিয়ে এড়িয়ে চলুন ( df
এফ ডিস্ট্রিবিউশনের জন্য ডেনসিটি ফাংশন letters
, ছোট ছোট বর্ণমালা অক্ষর দেয়)। এই বিশেষ ক্ষেত্রে, আপনার কোডটি ত্রুটিযুক্ত হবে না, তবে কখনও কখনও এটি হতে পারে ... তবে এটি বিভ্রান্তি সৃষ্টি করতে পারে, এবং আমরা এটি চাই না, আমরা কি?!? =)
পরিবর্তে, এর মতো কিছু ব্যবহার করুন (আমি আবার শুরু থেকে আবার যাব):
> dtf <- data.frame(f = 1:4, g = factor(letters[1:4]))
> dtf
f g
1 1 a
2 2 b
3 3 c
4 4 d
> with(dtf, as.numeric(g))
[1] 1 2 3 4
> dtf$g <- factor(dtf$g, levels = letters[4:1])
> dtf
f g
1 1 a
2 2 b
3 3 c
4 4 d
> with(dtf, as.numeric(g))
[1] 4 3 2 1
মনে রাখবেন আপনি এর data.frame
সাথে df
এবং এর letters
পরিবর্তে আপনার নামও রাখতে পারেন এবং g
ফলাফলটি ঠিক হবে। আসলে, এই কোডটি আপনি যে পোস্ট করেছেন তার সাথে অভিন্ন, কেবলমাত্র নাম পরিবর্তন করা হয়েছে। এই অংশটি factor(dtf$letter, levels = letters[4:1])
ত্রুটি ফেলবে না, তবে তা বিভ্রান্তিকর হতে পারে!
?factor
ম্যানুয়াল পুরোপুরি পড়ুন ! মধ্যে পার্থক্য কি factor(g, levels = letters[4:1])
এবং factor(g, labels = letters[4:1])
? একই সাথে কি levels(g) <- letters[4:1]
এবং g <- factor(g, labels = letters[4:1])
?
আপনি ggplot সিনট্যাক্স রাখতে পারেন, যাতে আমরা আপনাকে এটির জন্য আরও সাহায্য করতে পারি!
চিয়ার্স !!!
সম্পাদনা:
ggplot2
আসলে উভয় স্তর এবং মান পরিবর্তন প্রয়োজন? হুম ... আমি এটিকে খনন করব ...