2010-08-10 9 views
40

मेरे पास विभिन्न स्थानों से चिकित्सा सर्वेक्षण के परिणामों के साथ एक बड़ा सीएसवी है (स्थान डेटा में मौजूद एक कारक है)। चूंकि कुछ विश्लेषण किसी स्थान और सुविधा के लिए विशिष्ट होते हैं, इसलिए मैं केवल उन स्थानों से पंक्तियों के साथ उप-फ्रेम निकालना चाहता हूं। ऐसा होता है कि स्थान पहला क्षेत्र है इसलिए हाँ, मैं इसे CSV पंक्तियों को सॉर्ट करके कर सकता हूं, लेकिन मैं यह जानना चाहता हूं कि आर में इसे कैसे किया जाए क्योंकि मुझे यकीन है कि मुझे अन्य कॉलम के लिए इसकी आवश्यकता होगी।किसी फ़ील्ड से जुड़े किसी शर्त के आधार पर डेटा फ्रेम का सबसेट निकालने का तरीका कैसे?

तो, संक्षेप में, सवाल है: एक डेटा फ्रेम foo को देखते हुए, मैं एक डेटा फ्रेम बार जो केवल foo से जहां foo $ स्थान = 'वहाँ' पंक्तियां हैं कैसे बना सकते हैं?

बहुत बहुत धन्यवाद।

उत्तर

72

यहां दो मुख्य दृष्टिकोण हैं।

bar <- subset(foo, location == "there") 

ध्यान दें कि आप स्ट्रिंग एक साथ & और | के साथ कई सशर्त, जटिल सबसेट बनाने के लिए कर सकते हैं: मैं अपनी पठनीयता के लिए इस एक पसंद करते हैं।

दूसरा सूचकांक दृष्टिकोण है। आप या तो संख्यात्मक, या बुलियन स्लाइस के साथ आर में पंक्तियों को अनुक्रमित कर सकते हैं। foo$location == "there"T और F मानों का वेक्टर देता है जो foo की पंक्तियों की समान लंबाई है। आप केवल उन पंक्तियों को वापस करने के लिए ऐसा कर सकते हैं जहां स्थिति सही हो जाती है।

foo[foo$location == "there", ] 
+0

। @ जोफ्र्वाल्ड - 'subset()' पसंदीदा विधि नहीं है? विस्तृत चर्चा [यहां] (https://stackoverflow.com/questions/9860090/why-is-better-than-subset) –

+0

क्या सबसेट और foo minus सबसेट तक पहुंचने का कोई आसान तरीका है? मैं अपने डेटा को बार में विभाजित करना चाहता हूं और (foo-bar)। जाहिर है, मैं ऊपर से दोहरा सकता हूं! =, लेकिन क्या एक लाइनर तरीका है? – schoon

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