2011-03-05 15 views
30

में डेटा तालिका से चयन करें मूल्यों मैं आर में एक डेटा तालिका है:आर: सीमा

name date 
---- ---- 
John 1156649280 
Adam 1255701960 
...etc... 

मैं पंक्तियों एक सीमा के भीतर एक तारीख है के सभी प्राप्त करना चाहते हैं। एसक्यूएल में, मैं कह सकता हूं कि SELECT * FROM mytable WHERE date > 5 AND date < 15

किसी विशेष कॉलम में मानों की श्रेणी के आधार पर पंक्तियों का चयन करने के लिए आर में समतुल्य क्या है?

+7

ध्यान दें कि sqldf पैकेज आप एसक्यूएल लागू करने के लिए अनुमति देता है

subset(df, date==3) name date 1 John 3 

निकालें रेंज में से मेल खाता है आर डेटा फ्रेम करने के लिए। जैसे 'पुस्तकालय (sqldf); sqldf ("mytable से चुनें * दिनांक> 5 और दिनांक <15") '। Http://sqldf.googlecode.com पर होम पेज देखें। –

+0

@ जी। Grothendieck बहुत अच्छा; मैंने सोचा कि * किसी ने * इस तरह कुछ लिखा है, – poundifdef

+4

लिंक के लिए धन्यवाद, मुझे लगता है कि यह ध्यान दिया जाना चाहिए कि डेटा एक आर पैकेज ** डेटा.table ** है जो क्लास डेटा.table की डेटा ऑब्जेक्ट बनाता है। यह स्पष्ट नहीं है कि क्या आप अनौपचारिक रूप से "डेटा तालिका" शब्द का उपयोग कर रहे थे और वास्तव में ** data.frame **, या यदि आप वास्तव में ** data.table ** ऑब्जेक्ट्स के बारे में पूछ रहे हैं। – Ista

उत्तर

43

कुछ का निर्माण बाहर की जाँच की सलाह देते हैं डेटा

df < - data.frame (नाम = ग ("जॉन", "एडम"), तारीख = c (3, 5))

निकालें सटीक मेल:

subset(df, date>4 & date<6) 

    name date 
2 Adam 5 

निम्न सिंटैक्स का उत्पादन समान परिणाम::

df[df$date>4 & df$date<6, ] 

    name date 
2 Adam 5 
+0

आप दोनों में वही था जो मैं खोज रहा था। धन्यवाद! – poundifdef

14

यहां बहुत सारे विकल्प हैं, लेकिन अनुसरण करने में सबसे आसान है subset। विचार करें:

> set.seed(43) 
> df <- data.frame(name = sample(letters, 100, TRUE), date = sample(1:500, 100, TRUE)) 
> 
> subset(df, date > 5 & date < 15) 
    name date 
11 k 10 
67 y 12 
86 e 8 

आप अपने डेटा.फ्रेम के लिए सीधे सूचकांक में तर्क भी डाल सकते हैं। अल्पविराम पंक्तियों से पंक्तियों को अलग करता है। हमें बस याद रखना होगा कि आर इंडेक्स पंक्तियों को पहले, फिर कॉलम। तो यहाँ हम तारीख के साथ पंक्तियों> 5 & < 15 और उसके बाद सभी स्तंभों कह रहे हैं:

df[df$date > 5 & df$date < 15 ,] 

मैं भी सबसेट, ?subset के लिए मदद पेज और तार्किक ऑपरेटरों ?"&"

+0

सबसेट() - बिल्कुल वही जो मैं खोज रहा था। धन्यवाद! – poundifdef