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!
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
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()
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)