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

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

Merci!

49
demandé sur Robert 2014-08-29 19:33:29

3 réponses

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 vous effectuez l'appel distinct(), qui peut être plus propre à regarder si vous examinez le cadre de données en utilisant head/tail/glimpse.:

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

79
répondu Ron Gejman 2015-12-17 13:28:51

Juste pour ajouter d'autres réponses, si vous préférez retourner un vecteur plutôt que d'un dataframe, vous avez les options suivantes:

Dplyr

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

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

Dplyr >= 0.7.0

Utilisez le verbe pull:

mtcars %>% distinct(cyl) %>% pull()
9
répondu Josh Gilfillan 2017-07-20 00:44:24

Le dplyr select fonction sélectionne des colonnes spécifiques à partir d'une trame 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 ce qui suit:

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

Cela 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 le valeurs uniques directement dans la base R avec unique(dat$x).

Si vous avez plusieurs variables et que vous voulez 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)
7
répondu eipi10 2014-08-29 16:18:29