2010-11-17 12 views
7

आर में, मान लें कि हम एक वेक्टर
area = c(rep(c(26:30), 5), rep(c(500:504), 5), rep(c(550:554), 5), rep(c(76:80), 5)) और एक अन्य वेक्टर yield = c(1:100) डालते हैं। सहीआर में: सूचकांक == c: रेंज में एक मूल्य की बूलियन तुलना द्वारा अनुक्रमण वैक्टर (मिनट: अधिकतम)

> yield[area==27] 
[1] 2 7 12 17 22 
> yield[area==501] 
[1] 27 32 37 42 47 

कोई बात नहीं,:
अब, कहते हैं कि मैं तो जैसे सूचकांक करना चाहते हैं? लेकिन अजीब चीजें तब होती हैं जब मैं इसे c(A, B) का उपयोग कर अनुक्रमित करने का प्रयास करता हूं। (और भी weirder जब मैं c(min:max) कोशिश ...)

> yield[area==c(27,501)] 
[1] 7 17 32 42 

मैं क्या उम्मीद कर रहा हूँ पाठ्यक्रम के उदाहरण है कि अन्य उदाहरण के दोनों में मौजूद हैं, न सिर्फ उनमें से कुछ अजीब संयोजन है। यह काम करता है जब मैं पाइप या ऑपरेटर का उपयोग कर सकते हैं:

> yield[area==27 | area==501] 
[1] 2 7 12 17 22 27 32 37 42 47 

लेकिन क्या होगा अगर मैं एक सीमा के साथ काम कर रहा हूँ? मान लें कि मैं इसे c(27:503) श्रेणी से अनुक्रमित करना चाहता हूं? मेरा असली उदाहरण में अभी भी बहुत सा डेटा बिंदुओं और सीमा नहीं है, तो यह अधिक समझ में आता है, तो कृपया मैं हाथ से यह कर सुझाव देते हैं नहीं है, जो अनिवार्य रूप से मतलब होगा:

yield[area==27 | area==28 | area==29 | ... | area==303 | ... | area==500 | area==501] 

एक बेहतर तरीका होना चाहिए। ..

उत्तर

6

आप %in% का उपयोग करना चाहते हैं। यह भी ध्यान दें कि c(27:503) और 27:503 समान वस्तु उत्पन्न करते हैं।

> yield[area %in% 27:503] 
[1] 2 3 4 5 7 8 9 10 12 13 14 15 17 
[14] 18 19 20 22 23 24 25 26 27 28 29 31 32 
[27] 33 34 36 37 38 39 41 42 43 44 46 47 48 
[40] 49 76 77 78 79 80 81 82 83 84 85 86 87 
[53] 88 89 90 91 92 93 94 95 96 97 98 99 100 
+0

बहुत बढ़िया, धन्यवाद :) इसके अलावा, पृथ्वी पर यह कहां दस्तावेज है? बिना पूछे मुझे इसे कैसे ढूंढना चाहिए? मैं किस बारे में मदद पूछता हूं? असहनीय सहायता मैं इसे कॉल करता हूं: पी – gakera

+0

@ गाकेरा: यह '? मैच 'में है। आपको बेहतर कीवर्ड अनुमान लगाने या पूर्ण संदर्भ मैनुअल पढ़ने के द्वारा इसे ढूंढना चाहिए। :- मुझे लगता है कि मैं पहली बार '? Grep' के" यह भी देखें "अनुभाग के माध्यम से 'मैच' में आया था। –

+0

हाहा, बेहतर कीवर्ड अनुमान लगाना या पूर्ण मैनुअल पढ़ना, मुझे यह पसंद है! आर इतना उपयोगकर्ता के अनुकूल है: डी फिर से धन्यवाद। – gakera

1

क्यों सबसेट का उपयोग नहीं करते?

subset(yield, area > 26 & area < 504) ## for indexes 
subset(area, area > 26 & area < 504) ## for values 
+0

इसका उपयोग क्यों नहीं करें? एक कारण: 'सबसेट' में चेतावनी अनुभाग पर ध्यान देना, क्योंकि उपज [क्षेत्र> 26 और क्षेत्र <504] 'बराबर है। –

+0

क्या चेतावनी अनुभाग? –

+1

चेतावनी: यह एक सुविधाजनक कार्य है जिसका उद्देश्य इंटरैक्टिव रूप से उपयोग के लिए है। प्रोग्रामिंग के लिए मानक सबसेटिंग फ़ंक्शंस का उपयोग करना बेहतर होता है जैसे '[', और विशेष रूप से तर्क 'सबसेट' के गैर-मानक मूल्यांकन में अप्रत्याशित परिणाम हो सकते हैं। –

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