दिलचस्प पोस्ट
ग्रहण शुरू होने पर एसडीके को लोड करने में त्रुटि जावा में, क्या यह जानना संभव है कि कोई वर्ग पहले ही लोड हो चुका है या नहीं? एक मशीन पर .NET ढाँचा के संस्करणों को वापस करने के लिए PowerShell स्क्रिप्ट? कैसे MVC 4 सूची मॉडल बाध्यकारी काम करता है? मैं एक सीएसवी फ़ाइल में एक पायथन डिक्शनरी कैसे लिखूं? विभिन्न .NET फ्रेमवर्क संस्करणों के लिए ओएस संगतता सीएमडी / सी क्या मतलब है? इकाई फ़्रेमवर्क के साथ MySQL का उपयोग करना HTML सबमिट-बटन: अलग मान / बटन-पाठ? PHP चर में एक जेएस चर पास करें PHP में एक तारीख प्रारूप को दूसरे में कनवर्ट करें मैं एन्क्रिप्शन कुंजी को जावा में कैसे सुरक्षित रूप से संग्रहीत कर सकता हूं? जावा – पारदर्शी JScrollPane ऑनलाइन मुद्रा लेन-देन प्रबंधन के लिए एनओएसक्यूएल डाटाबेस अच्छा है एंड्रॉइड एल्पीसाइज़ मल्टीलाइन टेक्स्टव्यू

जानकारी के नुकसान के बिना एक पूर्णांक \ numeric में एक कारक कैसे परिवर्तित करें?

जब मैं एक कारक को एक संख्यात्मक या पूर्णांक में कनवर्ट करता हूं, तो मुझे अंतर्निहित स्तर के कोड मिलते हैं, संख्याओं के रूप में नहीं।

f <- factor(sample(runif(5), 20, replace = TRUE)) ## [1] 0.0248644019011408 0.0248644019011408 0.179684827337041 ## [4] 0.0284090070053935 0.363644931698218 0.363644931698218 ## [7] 0.179684827337041 0.249704354675487 0.249704354675487 ## [10] 0.0248644019011408 0.249704354675487 0.0284090070053935 ## [13] 0.179684827337041 0.0248644019011408 0.179684827337041 ## [16] 0.363644931698218 0.249704354675487 0.363644931698218 ## [19] 0.179684827337041 0.0284090070053935 ## 5 Levels: 0.0248644019011408 0.0284090070053935 ... 0.363644931698218 as.numeric(f) ## [1] 1 1 3 2 5 5 3 4 4 1 4 2 3 1 3 5 4 5 3 2 as.integer(f) ## [1] 1 1 3 2 5 5 3 4 4 1 4 2 3 1 3 5 4 5 3 2 

वास्तविक मूल्यों को प्राप्त करने के लिए मुझे paste का सहारा है।

 as.numeric(paste(f)) ## [1] 0.02486440 0.02486440 0.17968483 0.02840901 0.36364493 0.36364493 ## [7] 0.17968483 0.24970435 0.24970435 0.02486440 0.24970435 0.02840901 ## [13] 0.17968483 0.02486440 0.17968483 0.36364493 0.24970435 0.36364493 ## [19] 0.17968483 0.02840901 

क्या एक कारक को संख्यात्मक रूपांतरित करने का एक बेहतर तरीका है?

Solutions Collecting From Web of "जानकारी के नुकसान के बिना एक पूर्णांक \ numeric में एक कारक कैसे परिवर्तित करें?"

चेतावनी अनुभाग का ?factor :

विशेष रूप से, as.numeric कि एक कारक पर लागू as.numeric अर्थहीन है, और अंतर्निहित बलात्कार से हो सकता है। एक कारक f को लगभग अपने मूल अंकीय मूल्यों में as.numeric(levels(f))[f] , as.numeric(levels(f))[f] संख्यात्मक as.numeric(levels(f))[f] की सिफारिश की जाती है और as.numeric(as.character(f))as.numeric(as.character(f)) तुलना में थोड़ा अधिक कुशल है।

आर पर पूछे जाने वाले प्रश्न की इसी तरह की सलाह है


क्यों के रूप में है। as.numeric(levels(f))[f] as.numeric(as.character(f)) से अधिक कुशल?

as.numeric(as.character(f)) प्रभावी रूप से as.numeric(levels(f)[f]) , इसलिए आप nlevels(x) मानों की बजाय, length(x) मानों पर संख्यात्मक रूपांतरण कर रहे हैं। गति के अंतर में कुछ स्तरों के साथ लंबे वैक्टर के लिए सबसे अधिक स्पष्ट होगा। यदि मूल्य अधिकतर अद्वितीय हैं, तो गति में बहुत अंतर नहीं होगा। हालांकि आप रूपांतरण करते हैं, यह ऑपरेशन आपके कोड में बाधाओं की संभावना नहीं है, इसलिए इसके बारे में बहुत ज्यादा चिंता न करें।


कुछ समय

 library(microbenchmark) microbenchmark( as.numeric(levels(f))[f], as.numeric(levels(f)[f]), as.numeric(as.character(f)), paste0(x), paste(x), times = 1e5 ) ## Unit: microseconds ## expr min lq mean median uq max neval ## as.numeric(levels(f))[f] 3.982 5.120 6.088624 5.405 5.974 1981.418 1e+05 ## as.numeric(levels(f)[f]) 5.973 7.111 8.352032 7.396 8.250 4256.380 1e+05 ## as.numeric(as.character(f)) 6.827 8.249 9.628264 8.534 9.671 1983.694 1e+05 ## paste0(x) 7.964 9.387 11.026351 9.956 10.810 2911.257 1e+05 ## paste(x) 7.965 9.387 11.127308 9.956 11.093 2419.458 1e+05 

आर कई कारकों को परिवर्तित करने के लिए (undocumented) सुविधा फ़ंक्शन हैं:

  • as.character.factor
  • as.data.frame.factor
  • as.Date.factor
  • as.list.factor
  • as.vector.factor

लेकिन annoyingly, कारक को संभाल करने के लिए कुछ भी नहीं है -> संख्यात्मक रूपांतरण यहोशू उलरिक के जवाब का एक विस्तार के रूप में, मैं अपने मुहावरे काम की परिभाषा के साथ इस चूक को दूर करने का सुझाव दूंगा:

 as.numeric.factor <- function(x) {as.numeric(levels(x))[x]} 

कि आप अपनी स्क्रिप्ट की शुरुआत में स्टोर कर सकते हैं, या आपके में भी बेहतर .Rprofile फ़ाइल

सबसे आसान तरीका पैकेज varhandle से unfactor समारोह का उपयोग करने के लिए किया जाएगा

 unfactor(your_factor_variable) 

यह उदाहरण एक त्वरित प्रारंभ हो सकता है:

 x <- rep(c("a", "b", "c"), 20) y <- rep(c(1, 1, 0), 20) class(x) # -> "character" class(y) # -> "numeric" x <- factor(x) y <- factor(y) class(x) # -> "factor" class(y) # -> "factor" library(varhandle) x <- unfactor(x) y <- unfactor(y) class(x) # -> "character" class(y) # -> "numeric" 

यह केवल तब ही मामला है जब कारक लेबल मूल मानों से मेल खाते हैं। मैं इसे उदाहरण के साथ समझाऊंगा

मान लें कि डेटा सदिश है x :

 x <- c(20, 10, 30, 20, 10, 40, 10, 40) 

अब मैं चार लेबल के साथ एक कारक बनाएगा:

 f <- factor(x, levels = c(10, 20, 30, 40), labels = c("A", "B", "C", "D")) 

1) x टाइप डबल के साथ है, f टाइप पूर्णांक के साथ है यह जानकारी की पहली अपरिहार्य हानि है कारक हमेशा पूर्णांक के रूप में संग्रहित होते हैं

 > typeof(x) [1] "double" > typeof(f) [1] "integer" 

2) मूल मूल्यों (10, 20, 30, 40) को केवल वापस उपलब्ध करना संभव नहीं है हम देख सकते हैं कि f 1, 2, 3, 4 और दो विशेषताओं – लेबल्स की सूची ("ए", "बी", "सी", "डी") और वर्ग विशेषता "कारक" और कुछ नहीं।

 > str(f) Factor w/ 4 levels "A","B","C","D": 2 1 3 2 1 4 1 4 > attributes(f) $levels [1] "A" "B" "C" "D" $class [1] "factor" 

मूल मूल्यों में वापस लौटने के लिए हमें कारक बनाने में उपयोग किए गए स्तरों के मूल्यों को जानना होगा। इस मामले में c(10, 20, 30, 40) । अगर हम मूल स्तर (सही क्रम में) जानते हैं, तो हम मूल मानों में वापस लौट सकते हैं।

 > orig_levels <- c(10, 20, 30, 40) > x1 <- orig_levels[f] > all.equal(x, x1) [1] TRUE 

और यह केवल तभी काम करेगा जब मूल डेटा में लेबल के सभी संभावित मानों के लिए परिभाषित किया गया हो।

इसलिए यदि आपको मूल मूल्यों की आवश्यकता होगी, तो आपको उन्हें रखना होगा। अन्यथा एक उच्च मौका है कि उन्हें केवल एक कारक से वापस पाने के लिए संभव नहीं होगा।

इस पद के हर जवाब मेरे लिए परिणाम उत्पन्न करने में विफल रहे, एनएएस उत्पन्न हो रहे थे।

 y2<-factor(c("A","B","C","D","A")); as.numeric(levels(y2))[y2] [1] NA NA NA NA NA Warning message: NAs introduced by coercion 

मेरे लिए क्या काम है यह –

 library(magrittr) unclass(y2) %>% as.numeric [1] 1 2 3 4 1