R [बंद] में इसके नाम से कॉलम इंडेक्स खोजना


11

एक डेटा फ्रेम में, मैं नाम से कॉलम का इंडेक्स प्राप्त करना चाहूंगा। उदाहरण के लिए:

x <- data.frame(foo=c('a','b','c'),bar=c(4,5,6),quux=c(4,5,6))

मैं "बार" के लिए कॉलम इंडेक्स जानना चाहता हूं।

मैं निम्नलिखित के साथ आया था लेकिन यह असंगत लगता है। क्या कोई और अधिक सीधा निर्माण है जो मुझे याद आ रहा है?

seq(1,length(names(x)))[names(x) == "bar"]
[1] 2

3
match("bar",names(x))यह भी काम करता है, हालांकि matchपहले तर्क एक वेक्टर है जब बहुत अधिक उपयोगी है।
कार्डिनल

क्या आपको वास्तव में कॉलम के सूचकांक की आवश्यकता है? आप संपूर्ण स्तंभ प्राप्त करने के लिए x [, "बार"] का भी उपयोग कर सकते हैं, सामान्य x $ बार के समान । और दोनों मामलों में, पंक्तियों को सब्स्क्रिप्ट करें: x [2: 3, "बार"] या x $ बार [2: 3]। यदि आपको सूचकांक को एक दिनचर्या में शामिल करने की आवश्यकता है जिसे सूचकांक की आवश्यकता है, तो यह सहायक नहीं है।
वेन

बाह, यह मेरे डॉलर के संकेतों को गड़बड़ कर रहा है। लब्बोलुआब यह है कि एक कॉलम के नाम का उपयोग करने के दो तरीके हैं डॉलर साइन विधि और एक सबस्क्रिप्ट के रूप में इसे शामिल करें।
वेन

3
यह प्रश्न ऑफ़-टॉपिक प्रतीत होता है क्योंकि यह R में कुछ करने के बारे में है, और किसी भी संबंधित सांख्यिकीय मुद्दों के बारे में नहीं है।
गुंग - को पुनः स्थापित मोनिका

जवाबों:


22

शायद यह सबसे सरल तरीका है:

which(names(x)=="bar")

11

बस एक और संभावना जोड़ने के लिए:
आप आमतौर पर उपयोग कर सकते हैं grepऔर यह नियमित अभिव्यक्तियों का उपयोग करके अधिक परिष्कारित तरीके से इस तरह के काम करने के लिए डिकेडेंट्स (यानी, grepl) है।

आपके उदाहरण पर आपको कॉलम इंडेक्स मिल सकता है:

grep("^bar$", colnames(x)) या grep("^bar$", names(x))

^और $शुरुआत और एक स्ट्रिंग के अंत के लिए मेटा वर्ण, क्रमशः रहे हैं।

जाँच करें? Grep और विशेष रूप से; अधिक infos के लिए regex (यानी, आप केवल आंशिक नाम / मिलान ले सकते हैं, या वापसी मान स्ट्रिंग स्वयं या एक तार्किक वेक्टर है, ...)

मेरे लिए, grepअधिक आर-ईश है।

मजबूती से संबंधित हैडली विकम द्वारा हालिया पैकेज है: स्ट्रिंग, "आधुनिक, लगातार स्ट्रिंग प्रसंस्करण" के लिए एक पैकेज जिसमें फ़ंक्शन जैसे ग्रीज़ शामिल हैं। उन्होंने हाल ही में आर जर्नल में इस पर एक पेपर प्रकाशित किया

स्टैकओवरफ़्लो पर एक समान मुद्दे पर मेरा जवाब भी देखें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.