2011-01-29 13 views
22

उदाहरण के लिए, डेटा के साथ सेट mtcarsमैं नाम से अस्थायी रूप से हटाए गए कॉलम के साथ डेटाफ्रेम कैसे प्राप्त कर सकता हूं?

mtcars[ , "cyl"] 

और

mtcars[ , 2] 

दोनों मेरे ही स्तंभ दे। तो, के बाद से मैं सब कुछ, लेकिन स्तंभ 2 इस तरह प्राप्त कर सकते हैं:

mtcars[ , -2] 

मैं इस उम्मीद नहीं है:

mtcars[ , !colnames(mtcars)=="cyl"] 
:

mtcars[ , -"cyl"] 
Error in -"cyl" : invalid argument to unary operator 

बजाय सबसे अच्छा मैं के साथ आ सकते हैं यह है

क्या कोई आसान समाधान है?

संपादित करें: यह तार्किक लगता है कि यदि पहली दो तकनीकें काम करती हैं, तो दूसरी दो तकनीकों को भी चाहिए। मुझे उम्मीद थी कि मैं कुछ खो रहा था। ?"[" या ?subset के लिए सहायता पृष्ठ इस counterintuitive परिणाम की व्याख्या नहीं करते हैं। क्या कोई जानता है कि यह क्यों है?

+0

@ जोशुआ मुझे लगता है कि ये थोड़ा अलग हैं, यहां फोकस नाम से एक कॉलम हटाने पर है, जहां सामान्य सम्मेलन काम नहीं करते हैं। –

+0

मैंने शीर्षक में थोड़ा बदलाव किया और सवाल के लिए "क्यों" जोड़ा। –

+0

आर मैनुअल के परिचय के अनुभाग 2.7 में नियमों को समझाया गया है: http://cran.r-project.org/doc/manuals/R-intro.html#Index-vectors –

उत्तर

27

[संपादित करें:] क्यों नकारात्मक स्ट्रिंग सूचकांकों की स्पष्टीकरण से काम नहीं करता:

-() एक समारोह है और अनुसंधान डेवलपर्स यह और एक चरित्र वेक्टर पर इस्तेमाल नहीं किया जा सकता है (सिर्फ एक negating क्योंकि यह नहीं कह स्ट्रिंग समझ में नहीं आता है)। क्योंकि आप एक चरित्र वेक्टर को अस्वीकार नहीं कर सकते हैं, आप कॉलम ड्रॉप करने के लिए नकारात्मक तारों की आपूर्ति नहीं कर सकते हैं। समस्या - के साथ है और आपके द्वारा उद्धृत त्रुटि संदेश का स्रोत है। इसलिए नियम है कि नकारात्मक सूचकांक केवल संख्यात्मक के लिए काम करते हैं। मूल त्रुटि का स्रोत है:

> -"cyl" 
Error in -"cyl" : invalid argument to unary operator 

ध्यान दें कि क्यू को टिप्पणी में, वहाँ भ्रम था कि "cyl" के नकारात्मक संस्करण "-cyl" था, जो यह नहीं है, यह सिर्फ एक और स्ट्रिंग है। उपरोक्त आर स्निपेट दिखाता है कि प्रश्न में किए गए सबसेटिंग में क्या हो रहा था।

Section 2.7 "An Introduction to R" मैनुअल सबसेटिंग की अनुमति विधियों का वर्णन करता है।

[मूल:]:

> cars <- mtcars 
> cars[, "cyl"] <- NULL ## or cars$cyl <- NULL 
> names(cars) 
[1] "mpg" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" "carb" 

[संपादित करें:] क्यू के लिए संपादित करें के प्रकाश में यह दर्शाता है एक घटक को दूर करने का सबसे सरल तरीका सिर्फ NULL है कि घटक स्थापित करने के लिए है नामित स्तंभ की एक अस्थायी बूंद वांछित था, तो:

subset(mtcars, select = -cyl) 

या

+०१२३५१६४१०
mtcars[, !names(mtcars) %in% "cyl"] 

विकल्प हैं, और बाद वाले की तुलना में पूर्व क्लीनर हैं।

+0

प्रश्न संपादित किया गया: मैं एक अस्थायी बूंद स्थायी नहीं ढूंढ रहा हूं। –

12

मैं अक्सर subset का उपयोग करता हूं। एक उदाहरण का उपयोग करते हुए mtcars

> names(mtcars) 
[1] "mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" "carb" 
> cars <- subset(mtcars, select=-c(mpg,cyl)) 
> names(cars) 
[1] "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" "carb" 

this question के जवाब में कुछ अन्य उपाय नहीं हैं।

अद्यतन: सब्सक्रिप्ट नाम से एक या अधिक स्तंभों को अस्थायी हटाने के लिए भी काम करता है, को subset(mtcars, select=-cyl) के साथ प्रतिस्थापित करें।

+0

धन्यवाद सेठ, मैंने कभी भी सबसेट के विकल्पों की खोज नहीं की और यह एक उपयोगी टूल होगा। –

+0

वास्तव में * चयन * तर्क सीमित है, यह उपरोक्त @ गेविन-सिम्पसन नोट्स के रूप में एक नकारात्मक चरित्र वेक्टर नहीं हो सकता है। तो आप इसमें केवल नकारात्मक नकारात्मक तर्क प्राप्त कर सकते हैं, एक सिंगल कैरेक्टर वैरिएबल, या फिर स्ट्रिंग स्थिरांक की एक निश्चित सूची, जैसे 'select = -c (mpg, cyl)'। – smci

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

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