La funzione dplyr
select
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)
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
Vedere questa domanda per come connettere src_postgres() e dplyr http://stackoverflow.com/questions/21592266/i-cannot-connect- postgresql-schema-table-with-dplyr-package –
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