web-dev-qa-db-fra.com

Sélectionnez des valeurs uniques avec la fonction 'select' dans la bibliothèque 'dplyr'

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

Merci!

51
Yenici

Dans dplyr 0.3, ceci 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 vous exécutez l'appel distinct(), qui peut être plus clair à regarder si vous examinez le bloc de données à l'aide de head/tail/glimpse.:

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

85
Ron Gejman

Juste pour ajouter aux autres réponses, si vous préférez renvoyer un vecteur plutôt qu'un cadre de données, vous avez les options suivantes:

dplyr <0.7.

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

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

dplyr> = 0.7.

Utilisez le verbe pull:

mtcars %>% distinct(cyl) %>% pull()
12
Josh Gilfillan

La fonction dplyrselect sélectionne des colonnes spécifiques dans un cadre 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 ajouter les éléments suivants:

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

Ceci sélectionne à la fois la colonne x parmi toutes les colonnes du cadre de données que dplyr renvoie (et bien sûr, il n'y a 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 unique(dat$x).

Si vous avez plusieurs variables et que vous souhaitez que toutes les combinaisons uniques 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)
8
eipi10