2014-08-29 9 views
41

यह dplyr पुस्तकालय में select समारोह का उपयोग कर एक data.frame के एक स्तंभ से सभी अद्वितीय मान चुनने के लिए संभव है? SQL अंकन में समथिंग "SELECT DISTINCT field1 FROM table1" की तरह।'dplyr' पुस्तकालय में समारोह 'का चयन करें' के साथ अनन्य मानों का चयन करें

धन्यवाद!

उत्तर

67

:

आप कई चर है और सभी अद्वितीय संयोजन है कि डेटा में दिखाई देते हैं चाहते हैं, आप उपरोक्त कोड के रूप में इस सामान्यीकरण कर सकते हैं।

distinct_vector = distinct_df$field1

तुम भी एक ही समय में स्तंभों का एक उपसमूह चुनने कर सकते हैं:

distinct_df = df %>% distinct(field1)

आप के साथ विशिष्ट मानों की एक सदिश प्राप्त कर सकते हैं:

यहाँ एक उदाहरण है आप distinct() कॉल, अगर आप सिर/पूंछ/झलक .:

का उपयोग कर डेटा फ्रेम की जांच को देखने के लिए क्लीनर हो सकता है जो प्रदर्शन के रूप में 210

distinct_df = df %>% distinct(field1) %>% select(field1) distinct_vector = distinct_df$field1

+3

यह काम करता है यदि डेटा फ्रेम पहले से ही आर में है, लेकिन यदि आप डीबी कनेक्शन (यानी 'src_postgres() ') के माध्यम से सीधे डेटाबेस पर क्वेरी करने का प्रयास कर रहे हैं तो यह काम नहीं करता है। यह रिपोर्ट करता है: 'त्रुटि: SQL' – djhocking

+0

के साथ निर्दिष्ट कॉलम पर केवल विशिष्ट गणना नहीं कर सकता है src_postgres() और dplyr http://stackoverflow.com/questions/21592266/i-cannot-connect- postgresql-schema-table-with-dplyr-package –

+12

ध्यान दें कि जिस तरह से 'विशिष्ट() 'काम dplyr 0.5 में बदल गया है। डिफ़ॉल्ट रूप से 'विशिष्ट() 'अब केवल उन कॉलम को लौटाता है जिन्हें तर्क के रूप में उपयोग किया जाता है' विशिष्ट()'। यदि आप अन्य कॉलम को बरकरार रखना चाहते हैं तो आपको अब '.keep_all = TRUE' को 'विशिष्ट()' – RoyalTS

5

dplyrselect समारोह एक डेटा फ्रेम से विशिष्ट स्तंभ का चयन करता है। डेटा के किसी विशेष कॉलम में अद्वितीय मान वापस करने के लिए, आप group_by फ़ंक्शन का उपयोग कर सकते हैं। उदाहरण के लिए: यह दोनों डेटा फ्रेम में सभी स्तंभों कि dplyr रिटर्न (और बीच में से स्तंभ x का चयन करता है

dat %>% 
    group_by(x) %>% 
    summarise() %>% 
    select(unique.x=x) 

:

library(dplyr) 

# Fake data 
set.seed(5) 
dat = data.frame(x=sample(1:10,100, replace=TRUE)) 

# Return the distinct values of x 
dat %>% 
    group_by(x) %>% 
    summarise() 

    x 
1 1 
2 2 
3 3 
4 4 
5 5 
6 6 
7 7 
8 8 
9 9 
10 10 

आप निम्नलिखित जोड़ सकते हैं आप स्तंभ नाम बदलना चाहते हैं बेशक इस मामले में केवल एक कॉलम है) और इसका नाम बदलकर unique.x पर कर दिया गया है।

आप पर सीधे unique(dat$x) के साथ अद्वितीय मान भी प्राप्त कर सकते हैं। dplyr 0.3 इस में आसानी से distinct() पद्धति का उपयोग करके प्राप्त किया जा सकता

set.seed(5) 
dat = data.frame(x=sample(1:10,100, replace=TRUE), 
       y=sample(letters[1:5], 100, replace=TRUE)) 

dat %>% 
    group_by(x,y) %>% 
    summarise() %>% 
    select(unique.x=x, unique.y=y) 
+5

या dplyr 0 में नए 'अलग()' समारोह का उपयोग करें।3 – hadley

5

बस अन्य उत्तर में जोड़ने के लिए, यदि आप एक dataframe के बजाय एक वेक्टर वापस जाने के लिए पसंद करते हैं, आप निम्न विकल्प हैं:

dplyr < 0.7.0

एक कोष्ठक में dplyr कार्यों संलग्न करें और $ वाक्य रचना के साथ संयोजित:

(mtcars %>% distinct(cyl))$cyl 

dplyr> = 0.7.0

उपयोग pull क्रिया:

mtcars %>% distinct(cyl) %>% pull() 
संबंधित मुद्दे