दिलचस्प पोस्ट
जीएसओन का इस्तेमाल करते हुए अज्ञात फ़ील्ड के साथ JSON को डीकोड कैसे करें? जावा में "कड़े" शब्द का उपयोग कब करना चाहिए? Gem.source_index नापसंद है, विशिष्टता का उपयोग करें। क्या मुझे मणि या रेल फिर से स्थापित करना चाहिए? जावास्क्रिप्ट का उपयोग कर एक HTML तत्व को कैसे निकालना है? नेटबीन्स में जार फ़ाइल कैसे बनाएं रनटाइम वास्तव में क्या होता है। क्या हुआ? जब किसी नोड को पॉइंटर उपलब्ध नहीं होता है, तो एक लिंक्ड सूची से एक मध्य नोड को हटा रहा है जावा में एक मूल कार्यान्वयन क्या है? शेल में इसका क्या अर्थ है जब हम डॉलर के चिह्न और कोष्ठक के अंदर कमांड डालते हैं: $ (कमांड) एक भाषा कब स्क्रीटिंग भाषा माना जाता है? एंड्रॉइड 4.0 में स्पीकर चालू / बंद प्रोग्रामेटिक रूप से कैसे चालू करें जावा में यूआरएल क्वेरी स्ट्रींग हेरफेर करने के लिए एक अच्छी लाइब्रेरी पायथन के साथ फजी टाइमस्टैम्प पार्सिंग उन्हें जोड़ने के बाद दूरस्थ रिपॉजिटरी से निर्देशिका को निकालें। Gitignore एईएस सीटीआर 256 एन्क्रिप्शन ओपनएसएसएल पर ऑपरेशन का तरीका

आर में केस स्टेटमेंट समतुल्य

मेरे पास डेटाफ्रेम में एक चर है जहां फ़ील्ड में से एक में आम तौर पर 7-8 मान हैं I मैं उन्हें 3 या 4 नई श्रेणियां डेटाफ्रेम के भीतर एक नए चर के भीतर जोड़ना चाहता हूं। सबसे अच्छा तरीका क्या है?

अगर मैं एक एसक्यूएल-जैसे उपकरण में था, लेकिन मैं निश्चित तौर पर आर में इस पर कैसे हमला करूँ तो मैं एक केस स्टेटमेंट का उपयोग करूँगा।

कोई भी सहायता जो आप प्रदान कर सकते हैं बहुत सराहना की जाएगी!

Solutions Collecting From Web of "आर में केस स्टेटमेंट समतुल्य"

memisc पैकेज से cases देखने पर ध्यान memisc । यह उपयोग करने के दो अलग-अलग तरीकों के साथ केस-कार्यक्षमता को लागू करता है। पैकेज में दिए गए उदाहरणों से:

 z1=cases( "Condition 1"=x<0, "Condition 2"=y<0,# only applies if x >= 0 "Condition 3"=TRUE ) 

जहां x और y दो वैक्टर हैं

यदि आपको factor मिला तो आप मानक विधि द्वारा स्तर बदल सकते हैं:

 df <- data.frame(name = c('cow','pig','eagle','pigeon'), stringsAsFactors = FALSE) df$type <- factor(df$name) # First step: copy vector and make it factor # Change levels: levels(df$type) <- list( animal = c("cow", "pig"), bird = c("eagle", "pigeon") ) df # name type # 1 cow animal # 2 pig animal # 3 eagle bird # 4 pigeon bird 

आप आवरण के रूप में साधारण कार्य लिख सकते हैं:

 changelevels <- function(f, ...) { f <- as.factor(f) levels(f) <- list(...) f } df <- data.frame(name = c('cow','pig','eagle','pigeon'), stringsAsFactors = TRUE) df$type <- changelevels(df$name, animal=c("cow", "pig"), bird=c("eagle", "pigeon")) 

switch स्टेटमेंट का उपयोग करने का तरीका यहां है:

 df <- data.frame(name = c('cow','pig','eagle','pigeon'), stringsAsFactors = FALSE) df$type <- sapply(df$name, switch, cow = 'animal', pig = 'animal', eagle = 'bird', pigeon = 'bird') > df name type 1 cow animal 2 pig animal 3 eagle bird 4 pigeon bird 

इसका एक नकारात्मक पक्ष यह है कि प्रत्येक आइटम के लिए आपको श्रेणी नाम ( animal , आदि) लिखना होगा हमारे श्रेणियों को नीचे परिभाषित करने में सक्षम होने के लिए वाक्य-रचनात्मक रूप से अधिक सुविधाजनक है (बहुत समान सवाल देखें आर में डेटा फ्रेम में एक स्तंभ कैसे जोड़ें )

 myMap <- list(animal = c('cow', 'pig'), bird = c('eagle', 'pigeon')) 

और हम इस मैपिंग को "इनवर्ट" में किसी तरह से करना चाहते हैं मैं अपना स्वयं का इंपैक्ट फ़ंक्शन लिखता हूं:

 invMap <- function(map) { items <- as.character( unlist(map) ) nams <- unlist(Map(rep, names(map), sapply(map, length))) names(nams) <- items nams } 

और फिर उपर्युक्त मानचित्र को इनवर्ट करें:

 > invMap(myMap) cow pig eagle pigeon "animal" "animal" "bird" "bird" 

और फिर डेटा-फ्रेम में type कॉलम जोड़ने के लिए इसका उपयोग करना आसान है:

 df <- transform(df, type = invMap(myMap)[name]) > df name type 1 cow animal 2 pig animal 3 eagle bird 4 pigeon bird 

इमो, सबसे सरल और सार्वभौमिक कोड:

 dft=data.frame(x = sample(letters[1:8], 20, replace=TRUE)) dft=within(dft,{ y=NA y[x %in% c('a','b','c')]='abc' y[x %in% c('d','e','f')]='def' y[x %in% 'g']='g' y[x %in% 'h']='h' }) 

मुझे 'स्विच' के लिए कोई प्रस्ताव नहीं है कोड उदाहरण (इसे चलाएं):

 x <- "three"; y <- 0; switch(x, one = {y <- 5}, two = {y <- 12}, three = {y <- 432}) y 

आप कार पैकेज से पुनः उपयोग कर सकते हैं:

 library(ggplot2) #get data library(car) daimons$new_var <- recode(diamonds$clarity , "'I1' = 'low';'SI2' = 'low';else = 'high';")[1:10] 

मुझे इनमें से किसी को पसंद नहीं है, वे पाठक या संभावित उपयोगकर्ता के लिए स्पष्ट नहीं हैं मैं सिर्फ एक गुमनाम समारोह का उपयोग करता हूं, वाक्यविन्यास केस स्टेटमेंट के रूप में निर्लज्ज नहीं है, लेकिन मूल्यांकन एक केस स्टेटमेंट के समान है और यह दर्दनाक नहीं है। यह भी मानता है कि आपके मूल्यांकन के भीतर जहां आपके चर परिभाषित किए गए हैं।

 result <- ( function() { if (x==10 | y< 5) return('foo') if (x==11 & y== 5) return('bar') })() 

उन सभी () को अनाम फ़ंक्शन को लगा देना और मूल्यांकन करना आवश्यक है।

एक switch स्टेटमेंट है लेकिन मुझे ऐसा लगता है कि मुझे ऐसा लगता है कि वह काम करना चाहिए। चूंकि आपने एक उदाहरण प्रदान नहीं किया है इसलिए मैं एक कारक चर का उपयोग करके एक बनाऊँगा:

  dft <-data.frame(x = sample(letters[1:8], 20, replace=TRUE)) levels(dft$x) [1] "a" "b" "c" "d" "e" "f" "g" "h" 

यदि आप उन श्रेणियों को निर्दिष्ट करते हैं, जो आपको पुन: सौंपने के लिए उपयुक्त आदेश में चाहते हैं तो आप एक सूचकांक के रूप में कारक या संख्यात्मक चर का उपयोग कर सकते हैं:

 c("abc", "abc", "abc", "def", "def", "def", "g", "h")[dft$x] [1] "def" "h" "g" "def" "def" "abc" "h" "h" "def" "abc" "abc" "abc" "h" "h" "abc" [16] "def" "abc" "abc" "def" "def" dft$y <- c("abc", "abc", "abc", "def", "def", "def", "g", "h")[dft$x] str(dft) 'data.frame': 20 obs. of 2 variables: $ x: Factor w/ 8 levels "a","b","c","d",..: 4 8 7 4 6 1 8 8 5 2 ... $ y: chr "def" "h" "g" "def" ... 

बाद में मुझे पता चला कि वास्तव में दो अलग-अलग स्विच फ़ंक्शन हैं I यह सामान्य फ़ंक्शन नहीं है लेकिन आपको इसके बारे में switch.numeric करना चाहिए। switch.numeric या switch.characterswitch.character यदि आपका पहला तर्क आर 'कारक' होता है, तो आप switch.numeric हैं। switch.numeric व्यवहार, जो समस्याओं का कारण होने की संभावना है, क्योंकि अधिकांश लोग कारक के रूप में प्रदर्शित होने वाले कारक को देखते हैं और गलत धारणा को देखते हैं कि सभी फ़ंक्शन उन पर इस तरह कार्य करेंगे।

case_when() , जो मई 2016 में dplyr में जोड़ा गया था, इस समस्या को memisc::cases() समान तरीके से हल करता है।

उदाहरण के लिए:

 library(dplyr) mtcars %>% mutate(category = case_when( .$cyl == 4 & .$disp < median(.$disp) ~ "4 cylinders, small displacement", .$cyl == 8 & .$disp > median(.$disp) ~ "8 cylinders, large displacement", TRUE ~ "other" ) ) 

एक केस बयान वास्तव में सही दृष्टिकोण नहीं हो सकता है यदि यह एक कारक है, जो संभवतः है, तो कारक के स्तर को उचित रूप से निर्धारित करें

कहें कि आपके पास ए से ई के साथ एक कारक है, जैसे यह।

 > a <- factor(rep(LETTERS[1:5],2)) > a [1] ABCDEABCDE Levels: ABCDE 

स्तर बी और सी में शामिल होने के लिए और इसे बीसी नाम दें, बस उन स्तरों के नाम को बीसी के लिए बदल दें।

 > levels(a) <- c("A","BC","BC","D","E") > a [1] A BC BC DEA BC BC DE Levels: A BC DE 

परिणाम वांछित है

यदि आप sql- समान सिंटैक्स चाहते हैं तो आप केवल sqldf पैकेज का उपयोग कर सकते हैं। Tthe फ़ंक्शन का उपयोग करने के लिए भी नाम sqldf और सिंटैक्स इस प्रकार है

 sqldf(<your query in quotation marks>) 

आप मामले-शैली के रीमेकिंग कार्यों के लिए base फ़ंक्शन merge उपयोग कर सकते हैं:

 df <- data.frame(name = c('cow','pig','eagle','pigeon','cow','eagle'), stringsAsFactors = FALSE) mapping <- data.frame( name=c('cow','pig','eagle','pigeon'), category=c('animal','animal','bird','bird') ) merge(df,mapping) # name category # 1 cow animal # 2 cow animal # 3 eagle bird # 4 eagle bird # 5 pig animal # 6 pigeon bird 

मिक्सिंग plyr::mutate और dplyr::case_when मेरे लिए काम करता है और पठनीय है।

 iris %>% plyr::mutate(coolness = dplyr::case_when(Species == "setosa" ~ "not cool", Species == "versicolor" ~ "not cool", Species == "virginica" ~ "super awesome", TRUE ~ "undetermined" )) -> testIris head(testIris) levels(testIris$coolness) ## NULL testIris$coolness <- as.factor(testIris$coolness) levels(testIris$coolness) ## ok now testIris[97:103,4:6] 

बोनस अंक यदि कॉलम उत्परिवर्तित के बजाय एक चार कारक के रूप में आ सकता है! मामले की अंतिम पंक्ति_जब बयान, जो सभी गैर-मिलान वाली पंक्तियों को पकड़ता है, वह बहुत महत्वपूर्ण है।

  Petal.Width Species coolness 97 1.3 versicolor not cool 98 1.3 versicolor not cool 99 1.1 versicolor not cool 100 1.3 versicolor not cool 101 2.5 virginica super awesome 102 1.9 virginica super awesome 103 2.1 virginica super awesome