R

Rechercher et visualiser les doublons

Divers

Pour identifier des données dupliquées dans R, on a usuellement recours à la fonction duplicated().

Or, la fonction duplicated() retourne les positions des lignes dupliquées, à partir de la seconde occurence de chaque ligne :

> (df <- data.frame(x=c("a","b","c","b","d","c"),y=c(1,2,3,2,4,3))) 
  x y 
1 a 1 
2 b 2 
3 c 3 
4 b 2 
5 d 4 
6 c 3 
> duplicated(df) 
[1] FALSE FALSE FALSE  TRUE FALSE  TRUE

Si cela est fort utile pour supprimer les doublons (puisque seules les secondes occurrences sont identifiées), on peut avoir besoin d’identifier l’ensemble des lignes concernées (y compris donc les premières occurrences), si l’on souhaite par exemple visualiser les doublons, autrement dit d’avoir une fonction duplicated2() dont le résultat serait :

> duplicated2(df) 
[1] FALSE TRUE  TRUE  TRUE FALSE  TRUE

Merci au groupe des utilisateurs du logiciel R du CIRAD, voici la solution :

duplicated2 <- function(x){ 
  if (sum(dup <- duplicated(x))==0) 
    return(dup) 
  if (class(x) %in% c("data.frame","matrix")) 
    duplicated(rbind(x[dup,],x))[-(1:sum(dup))] 
  else duplicated(c(x[dup],x))[-(1:sum(dup))] 
}