Sélectionner des valeurs uniques avec la fonction ‘select’ dans la bibliothèque ‘dplyr’

Est-il possible de sélectionner toutes les valeurs uniques d’une colonne d’un data.frame utilisant la fonction select dans la bibliothèque dplyr ? Quelque chose comme ” SELECT DISTINCT field1 FROM table1 ” en notation SQL .

Merci!

Dans dplyr 0.3, cela peut être facilement réalisé en utilisant la méthode distinct() .

Voici un exemple:

distinct_df = df %>% distinct(field1)

Vous pouvez obtenir un vecteur des valeurs distinctes avec:

distinct_vector = distinct_df$field1

Vous pouvez également sélectionner un sous-ensemble de colonnes en même temps que l’appel distinct() , qui peut être plus propre si vous examinez le bloc de données en utilisant head / tail / glimpse .:

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

Juste pour append aux autres réponses, si vous préférez retourner un vecteur plutôt qu’un fichier de données, vous avez les options suivantes:

dplyr <0.7.0

Placez les fonctions dplyr entre parenthèses et combinez-les avec la syntaxe $ :

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

dplyr> = 0.7.0

Utilisez le verbe pull :

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

La fonction de sélection dplyr sélectionne des colonnes spécifiques dans un dplyr de données. Pour renvoyer des valeurs uniques dans une colonne de données particulière, vous pouvez utiliser la fonction group_by . Par exemple:

 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 

Si vous souhaitez modifier le nom de la colonne, vous pouvez append les éléments suivants:

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

Cela sélectionne à la fois la colonne x parmi toutes les colonnes du dplyr données dplyr par dplyr (et bien sûr, il n’ya qu’une seule colonne dans ce cas) et change son nom en unique.x .

Vous pouvez également obtenir les valeurs uniques directement dans la base R avec un unique(dat$x) .

Si vous avez plusieurs variables et souhaitez toutes les combinaisons uniques qui apparaissent dans les données, vous pouvez généraliser le code ci-dessus comme suit:

 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)