Supprimer les lignes en double par colonne dans R
-
Utilisez la fonction
distinct
du packagedplyr
pour supprimer les lignes en double par colonne dans R -
Utilisez les fonctions
group_by
,filter
etduplicated
pour supprimer les lignes en double par colonne dans R -
Utilisez les fonctions
group_by
etslice
pour supprimer les lignes en double par colonne dans R
Cet article présentera comment supprimer les lignes en double par colonne dans R.
Utilisez la fonction distinct
du package dplyr
pour supprimer les lignes en double par colonne dans R
Le package dplyr
fournit la fonction distinct
, l’une des bibliothèques de manipulation de données les plus courantes utilisées en langage R. distinct
sélectionne des lignes uniques dans le bloc de données donné. Il prend la DataFrame comme premier argument, puis les variables qui doivent être prises en compte lors de la sélection. Plusieurs variables de colonne peuvent être fournies pour filtrer les lignes uniques, mais dans l’extrait de code suivant, nous montrons les exemples de variable unique. Le troisième argument est facultatif et a la valeur par défaut - FALSE
, mais si l’utilisateur passe explicitement TRUE
, la fonction conservera toutes les variables dans le bloc de données après le filtrage. Notez que dplyr
utilise une fonction opérateur appelée tubes de forme - %>%
, qui est interprétée comme fournissant la variable de gauche comme premier argument de la fonction de droite. A savoir, la notation x %?% f(y)
devient f(x, y)
.
library(dplyr)
df1 <- data.frame(id = c(1, 2, 2, 3, 3, 4, 5, 5),
gender = c("F", "F", "M", "F", "B", "B", "F", "M"),
variant = c("a", "b", "c", "d", "e", "f", "g", "h"))
t1 <- df1 %>% distinct(id, .keep_all = TRUE)
t2 <- df1 %>% distinct(gender, .keep_all = TRUE)
t3 <- df1 %>% distinct(variant, .keep_all = TRUE)
df2 <- mtcars
tmp1 <- df2 %>% distinct(cyl, .keep_all = TRUE)
tmp2 <- df2 %>% distinct(mpg, .keep_all = TRUE)
Utilisez les fonctions group_by
, filter
et duplicated
pour supprimer les lignes en double par colonne dans R
Une autre solution pour supprimer les lignes en double par valeurs de colonne consiste à regrouper le bloc de données avec la variable de colonne, puis à filtrer les éléments à l’aide des fonctions filter
et duplicated
. La première étape se fait avec la fonction group_by
qui fait partie du package dplyr
. Ensuite, la sortie de l’opération précédente est redirigée vers la fonction filter
pour éliminer les lignes en double.
library(dplyr)
df1 <- data.frame(id = c(1, 2, 2, 3, 3, 4, 5, 5),
gender = c("F", "F", "M", "F", "B", "B", "F", "M"),
variant = c("a", "b", "c", "d", "e", "f", "g", "h"))
t1 <- df1 %>% group_by(id) %>% filter (! duplicated(id))
t2 <- df1 %>% group_by(gender) %>% filter (! duplicated(gender))
t3 <- df1 %>% group_by(variant) %>% filter (! duplicated(variant))
df2 <- mtcars
tmp3 <- df2 %>% group_by(cyl) %>% filter (! duplicated(cyl))
tmp4 <- df2 %>% group_by(mpg) %>% filter (! duplicated(mpg))
Utilisez les fonctions group_by
et slice
pour supprimer les lignes en double par colonne dans R
Alternativement, on peut utiliser la fonction group_by
avec slice
pour supprimer les lignes en double par valeurs de colonne. slice
fait également partie du package dplyr
et sélectionne les lignes par index. Fait intéressant, lorsque la DataFrame est regroupée, slice
sélectionnera les lignes de l’index donné dans chaque groupe, comme illustré dans l’exemple de code suivant.
library(dplyr)
df1 <- data.frame(id = c(1, 2, 2, 3, 3, 4, 5, 5),
gender = c("F", "F", "M", "F", "B", "B", "F", "M"),
variant = c("a", "b", "c", "d", "e", "f", "g", "h"))
t1 <- df1 %>% group_by(id) %>% slice(1)
t2 <- df1 %>% group_by(gender) %>% slice(1)
t3 <- df1 %>% group_by(variant) %>% slice(1)
df2 <- mtcars
tmp5 <- df2 %>% group_by(cyl) %>% slice(1)
tmp6 <- df2 %>% group_by(mpg) %>% slice(1)
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook