दिलचस्प पोस्ट
पोस्टग्रेज़ पासवर्ड प्रमाणीकरण विफल रहता है प्रत्येक 30 सेकंड में क्रोन चलाना ज़ूम कैनवास टू माउस कर्सर स्थाई तरीकों के माध्यम से साझा किए गए विकल्प को एक्सेस करना एंड्रॉइड में बैटरी स्तर और राज्य प्राप्त करें क्या एक एकल .NET प्रक्रिया के लिए स्मृति सीमा है? रनटाइम पर टेक्स्टव्यू की शैली कैसे बदलनी है <H: ग्राफिक इमेज> या <img> टैग का उपयोग करके वेबएप / वेबकोनटेक्स्ट / परिनियोजन फ़ोल्डर से बाहर चित्र लोड करें सभी मोबाइल ब्राउज़र के लिए पूर्ण वेबपेज और अक्षम ज़ूम व्यूपोर्ट मेटा टैग CodeIgniter PHP फ़्रेमवर्क – क्वेरी स्ट्रिंग प्राप्त करने की आवश्यकता है वायरलेस या ब्लूटूथ पर एक अन्य गैर-आईफोन डिवाइस का उपयोग कैसे किया जा सकता है? बैश टेम्प्लेटिंग: कैसे बाश के साथ टेम्प्लेट से कॉन्फ़िगरेशन फ़ाइलों को बनाने के लिए? वेब फ़ॉर्म सबमिट करने के लिए एन्टर कीप्रेस को कैसे रोकें? बाश में "$ @" और "$ *" के बीच अंतर क्या है? क्या 0 का एक HTTP स्थिति कोड का कोई अर्थ है?

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

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

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) में ऐसा करता हूं। लेकिन जब डेटा फ्रेम बहुत बड़ा होता है और इसमें बहुत से कॉलम होते हैं, इस तरह बहुत समय लगता है क्या किसी को पता है कि क्या यह करने के लिए कोई स्मार्ट तरीका है?

वेब के समाधान से एकत्रित समाधान "एक ही बार में कई कॉलम कारकों पर केंद्रित करें"

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

 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(.)))