2012-07-20 19 views
7

के कुछ कारकों पहले बनाएँ:सेटिंग स्तरों जब `बनाम स्तरों एक कारक() बनाने <-`

F1 <- factor(c(1,2,20,10,25,3)) 
F2 <- factor(paste0(F1, " years")) 
F3 <- F2 
levels(F3) <- paste0(sort(F1), " years") 
F4 <- factor(paste0(F1, " years"), levels=paste0(sort(F1), " years")) 

फिर उन्हें पर एक नज़र डालें:

> F1 
[1] 1 2 20 10 25 3 
Levels: 1 2 3 10 20 25 

> F2 
[1] 1 years 2 years 20 years 10 years 25 years 3 years 
Levels: 1 years 10 years 2 years 20 years 25 years 3 years 

> F3 
[1] 1 years 3 years 10 years 2 years 20 years 25 years 
Levels: 1 years 2 years 3 years 10 years 20 years 25 years 

> F4 
[1] 1 years 2 years 20 years 10 years 25 years 3 years 
Levels: 1 years 2 years 3 years 10 years 20 years 25 years 

सबसे पहले मुझे लगता है कि ध्यान दें एफ 2 में स्तरों की "अपेक्षित" आदेश एफ 1 के समान नहीं है। factor दस्तावेज पर एक नज़र डालने से पता चलता है कि क्यों: पहले इनपुट को सॉर्ट करके स्तर बनाए जाते हैं। एफ 2 के मामले में, ये तार हैं, जहां सॉर्टिंग खाते में लंबाई लेती है (?)।

मुझे समझने के लिए कठिन क्या है F3 और F4 के बीच के स्तर को सेट करने में अंतर है। एफ 3 में मैंने कारक बनाने के बाद स्तर निर्धारित किए हैं जबकि एफ 4 में मैंने कारक बनाते समय उन्हें स्पष्ट रूप से सेट किया था। एफ 3 में, स्तरों का उपयोग() < - पूरी तरह से स्तरों का एक रिलाबेल नहीं है, लेकिन न ही यह उन तरीकों को पुन: व्यवस्थित करता है जिसकी मुझे उम्मीद थी।

क्या कोई अंतर बता सकता है?

उत्तर

9

F1 संख्यात्मक सॉर्टिंग का उपयोग करता है, जैसा कि आपने स्वयं को समझ लिया है।

F2 कोषगत छंटाई का उपयोग करता है, पहले पहले चरित्र की तुलना, दूसरे का उपयोग कर संबंधों को तोड़ने, और इतने पर है, जिसके कारण "10 years""1 years" और "2 years" के बीच है।

F4 एक चरित्र वेक्टर से बनाया गया है, लेकिन संभावित कारकों की एक स्पष्ट सूची के साथ। इसलिए सूची ली जाती है (सॉर्ट किए बिना) और संख्या 1 से 6 के साथ पहचाना जाता है। फिर आपके इनपुट की प्रत्येक वस्तु की तुलना संभावित स्तरों के सेट से की जाती है, और संबंधित संख्या संग्रहीत होती है। आखिरकार, एक कारक केवल संख्याओं का एक समूह है (as.numeric उन्हें आपको दिखाएगा) मुद्रण के लिए उपयोग किए जाने वाले स्तरों की एक सूची से जुड़ा हुआ है। तो F4F2 की तरह मुद्रित हो जाता है, लेकिन इसके स्तर अलग-अलग क्रमबद्ध होते हैं।

F3 F2 से बनाया गया था, इसलिए इसके स्तर प्रारंभ में रद्द नहीं किए गए थे। असाइनमेंट केवल वेक्टर में संख्याओं के स्तर के सेट के सेट को प्रतिस्थापित करता है। तो आप इसे के रूप में नामांकन के रूप में सोच सकते हैं। यदि आप संख्याओं को देखते हैं, तो वे F2 से मेल खाते हैं, जबकि संबंधित नाम, और विशेष रूप से नामों का क्रम, F4 से मेल खाता है।

अपने प्रश्न का दावा के रूप में है कि यह विशुद्ध रूप से फिर लेबल किये जाने नहीं था: हाँ, यह एक शुद्ध रूप से फिर लेबल है, तो आप F3F2 से निम्न परिवर्तन करें (प्रिंटआउट की दोनों पंक्तियों में) का उपयोग कर प्राप्त:

  • 10 → 2
  • 2 → 3
  • 20 → 10
  • 25 → 20
  • 3 → 25

str फ़ंक्शन एक कारक के आंतरिक प्रतिनिधित्व को देखने के लिए भी एक अच्छा टूल है।

6

आप निम्न डेटा से F2 बनाया:

> paste0(F1, " years") 
[1] "1 years" "2 years" "20 years" "10 years" "25 years" 
[6] "3 years" 

अनन्य मानों स्तरों छँटाई कि आप

> levels(F2) 
[1] "1 years" "10 years" "2 years" "20 years" "25 years" 
[6] "3 years" 

इसलिए उल्लेख अक्षरांकीय में परिणाम उत्पन्न करने छंटाई, "2 years" वास्तव में एक के रूप में संग्रहीत किया जाता है - यह तीसरी श्रेणी या स्तर में है। ध्यान दें कि इस तरह से डेटा कारक में संग्रहीत किया जाता में एक सूक्ष्म अंतर को जन्म देता है:

> as.numeric(F1) 
[1] 1 2 5 4 6 3 
> as.numeric(F2) 
[1] 1 3 4 2 5 6 

अब आप स्पष्ट रूप से F3 के स्तर को सेट करते हैं, आप इन मूल्यों में गुजर रहे हैं:

> paste0(sort(F1), " years") 
[1] "1 years" "2 years" "3 years" "10 years" "20 years" 
[6] "25 years" 

> as.numeric(F3) 
[1] 1 3 4 2 5 6 

इसलिए F3 के 2 तत्व हो जाता है:

ऊपर से, डेटा के रूप में F3 में संग्रहीत किया गया आपके द्वारा निर्दिष्ट तीसरा स्तर; "3 years"

levels<- इसलिए संख्यात्मक प्रतिनिधित्व और प्रदर्शित होने वाले लेबल के बीच मैपिंग बदलता है। यह निश्चित रूप से एक कारक को पुनर्व्यवस्थित या रिलीज़ करने का एक तरीका है जो आप उम्मीद करते हैं। levels<- डेटा को पुन: व्यवस्थित नहीं करता है, यह केवल कारक के स्तर को बदलता है; अंतर्निहित संख्यात्मक प्रतिनिधित्व अभी भी है और इस प्रकार नए स्तरों पर मैप किया गया है।

F4 में आप स्तरों को स्पष्ट रूप से समय बनाने के लिए सेट है, इसलिए डेटा F1 साथ के रूप में एक ही तरीके से संख्यानुसार जमा हो जाती है:

> F4 <- factor(paste0(F1, " years"), levels=paste0(sort(F1), " years")) 
> as.numeric(F4) 
[1] 1 2 5 4 6 3 

यह डेटा के विभिन्न अंतर्निहित संख्यात्मक निरूपण है (या करने के लिए मानचित्रण मूल स्तर) जो व्यक्तिगत डेटा बिंदुओं के कारण हैं जो आप F3 और F4 के बीच अंतर को जन्म दे रहे हैं।

मुझे इससे पहले काटा गया था और अब इसके लिए देखना है लेकिन यह समय-समय पर मुझे पकड़ता है।

संबंधित मुद्दे