duplicated()

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Nathalie Brenac
Messages : 11
Enregistré le : 13 Avr 2017, 07:07

Re: duplicated()

Messagepar Nathalie Brenac » 13 Avr 2017, 09:19

Bonjour,

Je me forme depuis peu à R.
j'ai un jeu de données avec des doublon sur la variables SIRET.
Je voudrais pour chaque SIRET :
- connaitre le nombre de doublon. ce nombre sera mis dans dans une nouvelle variable: Nb_doublon
- Mettre 1 en face de chaque SIRET unique: entreprise_Unique
Sur un jeu de données fictif:

Code : Tout sélectionner

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


Dans cette exemple, dans la colonnes x nous avons 2 doublons avec b et c.
Il faut d'abord mettre la base dans l'ordre croissant de la variable ayant les doublons, je pensais utiliser order
Ensuite, je me suis servie de votre fonction duplicated2 et j'ai essayé de la changer afin d'avoir les variables qui m'interessent, sans succes.
Je vous remets la fonction duplicated2

Code : Tout sélectionner

duplicated2 <- function(x){
  if (sum(dup <- duplicated(x))==1)
    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))]
   }


Mais elle en me donne pas le résultat que je voudrais, exemple de ce que je cherche à faire

Code : Tout sélectionner

 df <- data.frame(x=c("a","b","b","c","c","d"),y=c(1,2,2,3,3,4),entreprise_unique=c(1,0,1,0,1,1),nb_doublon=c(1,0,2,0,2,1))
 df
  x y entreprise_unique nb_doublon
1 a 1                 1          1
2 b 2                 0          0
3 b 2                 1          2
4 c 3                 0          0
5 c 3                 1          2
6 d 4                 1          1
 


Merci pour votre aide.
Nathalie
Bonne journée
Nathalie

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: duplicated()

Messagepar Pierre-Yves Berrard » 13 Avr 2017, 09:58

Bonjour,

Comment est calculé nb_doublon ?
La ligne 1 n'a pas de doublon, pourtant nb_doublon vaut 1.

Autre question : vous voulez identifier les doublons sur x (SIRET) ou sur la ligne complète (x et y) ?
PY

Nathalie Brenac
Messages : 11
Enregistré le : 13 Avr 2017, 07:07

Re: duplicated()

Messagepar Nathalie Brenac » 13 Avr 2017, 10:05

Bonjour,
identifier les doublons que sur x.

La variable nb_doublon compte le nombre de fois qu'une valeur de x apparaît:
la valeur a apparaît qu'une fois donc nb_doublon=1,
La valeur b apparaît 2 fois donc nb_doublon=2 mais n’apparaît que sur la dernière ligne de la valeur de b.
et ainsi de suite.

Merci
Bonne journée
Nathalie

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: duplicated()

Messagepar Pierre-Yves Berrard » 13 Avr 2017, 11:23

Une solution en utilisant table() pour compter les occurences de x :

Code : Tout sélectionner

# tri à plat sur x
occurences <- table(df$x)

# ajout du nombre d'occurences à la table
df$nb_occurences <- ifelse(
  duplicated(df$x, fromLast = TRUE),
  0,
  occurences[df$x]
)

# entreprise unique
df$entreprise_unique <- df$nb_occurences != 0


Code : Tout sélectionner

df[order(df$x), ]

#   x y nb_occurences entreprise_unique
# 1 a 1             1              TRUE
# 2 b 2             0             FALSE
# 4 b 2             2              TRUE
# 3 c 3             0             FALSE
# 6 c 3             2              TRUE
# 5 d 4             1              TRUE
PY

Nathalie Brenac
Messages : 11
Enregistré le : 13 Avr 2017, 07:07

Re: duplicated()

Messagepar Nathalie Brenac » 13 Avr 2017, 12:09

Merci bcp.
ça marche très bien.
Vous m'avez fait gagner bcp de temps.
Bonne journée,
Nathalie
Bonne journée
Nathalie


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité