दिलचस्प पोस्ट
क्या PHP के filter_var FILTER_VALIDATE_EMAIL वास्तव में काम करता है? JQuery के उपयोग से रोलओवर पर छवि स्रोत बदलें ज़ामिरीन स्टूडियो – लॉगिन नहीं कर सकते हैं – पहचान की गई वस्तुओं में से एक अमान्य प्रारूप में था MySQL के साथ औसत गणना करने का आसान तरीका सी में लिनक्स के साथ साझा मेमोरी का उपयोग कैसे करें Graphviz: कैसे एक ग्राफ से। करने के लिए जाना है? 'करीइंग' क्या है? HTML पढ़ते समय एक JEditorPane में ForegroundActions लागू असंगत प्रदर्शन कैसे कस्टम बटन से बटन की तरह फेसबुक ट्रिगर करने के लिए? वहाँ एक JQuery प्लगइन जो Draggable और चयन योग्य है जावा में सार वर्ग बनाम अंतरफलक क्या स्थिर तरीकों का एक बहुत बुरा उपयोग कर रहा है? उच्च रिज़ॉल्यूशन के साथ पीडीएफ़ को कन्वर्ट करें कार्य के लिए तर्क के रूप में 2 डी-सरणी POM.xml में गुणों के रूप में मेवेन से कमांड लाइन तर्क पास करना

एक ही बार में कई कॉलम कारकों पर केंद्रित करें

मेरे नीचे एक नमूना डेटा फ्रेम है:

data <- data.frame(matrix(sample(1:40), 4, 10, dimnames = list(1:4, LETTERS[1:10]))) 

मैं जानना चाहता हूं कि मैं कई कॉलम कैसे चुन सकता हूं और उन्हें कारकों के साथ एक साथ परिवर्तित कर सकता हूं। मैं आमतौर पर data$A = as.factor(data$A) जैसे data$A = as.factor(data$A) में ऐसा करता हूं। लेकिन जब डेटा फ्रेम बहुत बड़ा होता है और इसमें बहुत से कॉलम होते हैं, इस तरह बहुत समय लगता है क्या किसी को पता है कि क्या यह करने के लिए कोई स्मार्ट तरीका है?

Solutions Collecting From Web of "एक ही बार में कई कॉलम कारकों पर केंद्रित करें"

कुछ कॉलमों को कारकों पर दबाव डालने के लिए चुनें:

 cols <- c("A", "C", "D", "H") 

चुने हुए कॉलमों को lapply() और प्रतिस्थापित करने के लिए lapply() का उपयोग करें:

 data[cols] <- lapply(data[cols], factor) 

परिणाम की जांच करें:

 sapply(data, class) # ABCDEFG # "factor" "integer" "factor" "factor" "integer" "integer" "integer" # HIJ # "factor" "integer" "integer" 

यहाँ एक विकल्प है dplyr का उपयोग कर magrittr से %<>% ऑपरेटर परिणामस्वरूप मूल्य के साथ lhs ऑब्जेक्ट को अपडेट करते हैं।

 library(magrittr) library(dplyr) cols <- c("A", "C", "D", "H") data %<>% mutate_each_(funs(factor(.)),cols) str(data) #'data.frame': 4 obs. of 10 variables: # $ A: Factor w/ 4 levels "23","24","26",..: 1 2 3 4 # $ B: int 15 13 39 16 # $ C: Factor w/ 4 levels "3","5","18","37": 2 1 3 4 # $ D: Factor w/ 4 levels "2","6","28","38": 3 1 4 2 # $ E: int 14 4 22 20 # $ F: int 7 19 36 27 # $ G: int 35 40 21 10 # $ H: Factor w/ 4 levels "11","29","32",..: 1 4 3 2 # $ I: int 17 1 9 25 # $ J: int 12 30 8 33 

या अगर हम data.table का उपयोग कर रहे हैं, तो set साथ लूप का उपयोग करें

 setDT(data) for(j in cols){ set(data, i=NULL, j=j, value=factor(data[[j]])) } 

या हम .SDcols में 'कोल्स' को निर्दिष्ट कर सकते हैं और (' := )' कोल्स 'से'

 setDT(data)[, (cols):= lapply(.SD, factor), .SDcols=cols] 

mutate_at फ़ंक्शन का उपयोग करने के लिए अधिक हालिया tidyverse तरीका है:

 library(tidyverse) library(magrittr) set.seed(88) data <- data.frame(matrix(sample(1:40), 4, 10, dimnames = list(1:4, LETTERS[1:10]))) cols <- c("A", "C", "D", "H") data %<>% mutate_at(cols, funs(factor(.))) str(data) $ A: Factor w/ 4 levels "5","17","18",..: 2 1 4 3 $ B: int 36 35 2 26 $ C: Factor w/ 4 levels "22","31","32",..: 1 2 4 3 $ D: Factor w/ 4 levels "1","9","16","39": 3 4 1 2 $ E: int 3 14 30 38 $ F: int 27 15 28 37 $ G: int 19 11 6 21 $ H: Factor w/ 4 levels "7","12","20",..: 1 3 4 2 $ I: int 23 24 13 8 $ J: int 10 25 4 33 

और, पूर्णता के लिए और इस प्रश्न के संबंध में केवल तार स्तंभों को बदलने के बारे में पूछने पर , mutate_if :

 data <- cbind(stringVar = sample(c("foo","bar"),10,replace=TRUE), data.frame(matrix(sample(1:40), 10, 10, dimnames = list(1:10, LETTERS[1:10]))),stringsAsFactors=FALSE) factoredData = data %>% mutate_if(is.character,funs(factor(.)))