2012-05-21 11 views
26

फ़ाइल आयात करने के बाद, मैं कॉलम नामों से रेफ़रल को आसान बनाने के लिए कॉलम नामों से रिक्त स्थान को निकालने का प्रयास करता हूं।डेटा.फ्रेम के कॉलम नामों में रिक्त स्थान कैसे ठीक करें (रिक्त स्थान हटाएं, डॉट इंजेक्ट करें)?

क्या ट्रांसफॉर्म का उपयोग करके और फिर इस कमांड को बनाए गए अतिरिक्त कॉलम को हटाने का कोई बेहतर तरीका है?

names(ctm2) 
#tranform function does this, but requires some action 
ctm2<-transform(ctm2,dymmyvar=1) 
#remove dummy column 
ctm2$dymmyvar <- NULL 
names(ctm2) 
+2

inject.dots फ़ंक्शन का उपयोग करें: - समारोह (DF) 'inject.dots <{नाम (DF) <- उप (।" "," ", नाम (DF)); df}' –

+0

एक गंभीर तरफ मैं रिक्त स्थान के साथ कॉलम नामों में आर आयात आश्चर्यचकित हूं और इसे स्वचालित रूप से ठीक नहीं करता है। –

+4

@TylerRinker read.table फ़ंक्शन डिफ़ॉल्ट रूप से 'make.names' फ़ंक्शन के साथ करता है। –

उत्तर

45

उस उद्देश्य के लिए और अधिक सुरुचिपूर्ण और सामान्य समाधान मौजूद है। एक वाक्य रचनात्मक रूप से वैध नाम में अक्षर, संख्याएं और डॉट या अंडरलाइन वर्ण होते हैं और एक अक्षर या बिंदु के साथ शुरू होता है जो किसी संख्या के बाद नहीं होता है।

इसके अतिरिक्त, ध्वज unique=TRUE आपको नए कॉलम नामों में संभावित गणराज्य से बचने की अनुमति देता है।

+0

को प्रतिस्थापित करेगा आपके कोड में डेटाफ्रेम नाम क्या है? – mike

1

बस names(ctm2) को असाइन:

names(ctm2) <- c("itsy", "bitsy", "eeny", "meeny") 

या डेटा के आधार पर रास्ते में:

यह अब मैं क्या उपयोग है

names(ctm2) <- paste("myColumn", 1:ncol(ctm2), sep="") 

एक और संभावना को संपादित करने के लिए है अपने स्रोत फ़ाइल ...

15

प्रत्येक स्तंभ में केवल पहला अंतरिक्ष बदलने के लिए आप भी कर सकता है:

names(ctm2) <- sub(" ", ".", names(ctm2)) 

या सभी रिक्त स्थान को बदलने के लिए (जो जैसे कि यह एक छोटे से अधिक उपयोगी होगा लगता है):

names(ctm2) <- gsub(" ", "_", names(ctm2)) 

या, के रूप में (हालांकि एक तरीका है कि सभी रिक्त स्थान को ठीक होगा में नहीं) पहले उत्तर में उल्लेख किया है:

spaceless <- function(x) {colnames(x) <- gsub(" ", "_", colnames(x));x} 
newDF <- spaceless(ctm2) 

जहां x अपने data.frame का नाम है। मैं "_" के साथ मुद्दों से बचने के लिए "_" का उपयोग करना पसंद करता हूं। एक आईडी के हिस्से के रूप में।

बिंदु यह है कि gsub पैटर्न पैटर्न के पहले उदाहरण पर नहीं रुकता है।

tidy.name.vector <- make.names(name.vector, unique=TRUE) 

make.names() चरित्र वैक्टर से बाहर वाक्य रचना वैध नाम बनाता है:

+0

कम से कम मेरे अंत में समस्या यह है: यदि कॉलम नाम में एक से अधिक स्थान हैं, तो यह केवल पहले – AmagicalFishy

1

data.table में स्तंभ नामों में रिक्तियां को दूर करने के लिए एक आसान तरीका है। आपको डेटा डेटा में अपना डेटा फ्रेम बदलना होगा।

setnames(x=DT, old=names(DT), new=gsub(" ","",names(DT))) 

Country CodeCountryCode

+0

'पुराना' छोड़ दें और इसका एक ही परिणाम होगा। (यह दस्तावेज़ों में शामिल है।) – Frank

0

में परिवर्तित हो जाएगा इस तरह के नाम असाइन करें। यह सबसे अच्छा काम करता है। यह अंडरस्कोर के साथ नाम में सभी सफेद रिक्त स्थान बदल देता है।

names(ctm2)<-gsub("\\s","_",names(ctm2))

0

वैकल्पिक रूप से, आप stingr पैकेज के साथ एक ही परिणाम प्राप्त करने में सक्षम हो सकता है।

names(ctm2)<-names(ctm2)%>% stringr::str_replace_all("\\s","_")

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