2014-08-29 9 views

risposta

67

In dplyr 0,3 Ciò può essere ottenuto facilmente utilizzando il metodo distinct().

Ecco un esempio:

distinct_df = df %>% distinct(field1)

È possibile ottenere un vettore di valori distinti con:

distinct_vector = distinct_df$field1

È anche possibile selezionare un sottoinsieme di colonne contemporaneamente mentre esegui la chiamata , che può essere più pulita da esaminare se esamini il frame dei dati utilizzando head/tail/glimpse .:

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

+3

Funziona se il frame di dati è già in R, ma non funziona se si sta tentando di eseguire la query direttamente sul database tramite una connessione db (ad esempio 'src_postgres()'). Segnala: 'Errore: impossibile calcolare distinti solo su colonne specificate con SQL' – djhocking

+0

Vedere questa domanda per come connettere src_postgres() e dplyr http://stackoverflow.com/questions/21592266/i-cannot-connect- postgresql-schema-table-with-dplyr-package –

+12

Si noti che il modo in cui 'distinct()' funziona è cambiato in dplyr 0.5. Di default 'distinct()' ora restituisce solo le colonne che sono usate come argomenti per 'distinct()'. Se vuoi mantenere le altre colonne devi passare '.keep_all = TRUE' come argomento addizionale a' distinct() ' – RoyalTS

5

La funzione dplyrselect seleziona colonne specifiche da un frame di dati. Per restituire valori univoci in una particolare colonna di dati, è possibile utilizzare la funzione group_by. Per esempio:

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 

Se si desidera cambiare il nome della colonna è possibile aggiungere il seguente:

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

Questo sia seleziona colonna x tra tutte le colonne nella cornice dati che dplyr rendimenti (e ovviamente c'è solo una colonna in questo caso) e cambia il suo nome in unique.x.

È anche possibile ottenere i valori univoci direttamente nella base R con unique(dat$x).

Se si dispone di più variabili e desidera che tutte le combinazioni uniche che appaiono nei dati, si può generalizzare il codice precedente come segue:

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

Oppure utilizzare la nuova funzione 'distinti()' in dplyr 0.3 – hadley

5

solo per aggiungere alle altre risposte, se si preferisce di restituire un vettore piuttosto che un dataframe, sono disponibili le seguenti opzioni:

dplyr < 0.7.0

racchiudere le funzioni dplyr in una parentesi e combinarlo con $ sintassi:

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

dplyr> = 0.7.0

Utilizzare la pull verbo:

mtcars %>% distinct(cyl) %>% pull()