आर में कारकों से निपटना काफी अजीब काम है, मुझे मानना होगा ... कारक स्तरों को पुन: व्यवस्थित करते समय, आप अंतर्निहित संख्यात्मक मानों को पुन: व्यवस्थित नहीं कर रहे हैं। यहाँ थोड़ा प्रदर्शन है:
> 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या आप गंदगी बातें करेंगे (जब तक आप जानते हैं कि वास्तव में आप क्या कर रहे हैं)।
एक lil 'सुझाव: अपनी वस्तुओं को R के ऑब्जेक्ट्स के रूप में एक समान नाम के साथ नामकरण से बचें ( 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वास्तव में दोनों स्तरों और मूल्यों को बदलने की आवश्यकता है? हम्म ... मैं इसे बाहर एक खुदाई करेंगे ...