Utilisation fonction 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

Natacha Biset
Messages : 8
Enregistré le : 14 Nov 2018, 14:34

Utilisation fonction duplicated

Messagepar Natacha Biset » 15 Nov 2018, 10:28

Bonjour,

Je suis débutante dans l'utilisation de R et j'ai une question concernant l'utilisation de duplicated. Voici mon problème :
J'ai une base de données avec des personnes (code unique pour les reconnaitre), ainsi qu'un code pour la vente d'un produit. Je souhaiterai ne garder dans ma base de donnée que les patients qui n'ont reçu qu'un seul type de produit. Par exemple
id produit
xx 1
xx 1
xx 2
yy 2
yy 2

Je voudrais ne garder que la personne yy car la xx a acheté 2 produits différents. On m'a conseillé d'utiliser la fonction !duplicated mais je ne suis pas du tout familière avec celle-ci. Est-ce que quelqu'un pourrait m'aider?

Merci beaucoup !

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Utilisation fonction duplicated

Messagepar Logez Maxime » 15 Nov 2018, 10:50

Bonjour,

deux possibilités avec les fonctions de base et avec les fonctions du package dplyr :

Code : Tout sélectionner

tab <-
structure(list(id = structure(c(1L, 1L, 1L, 2L, 2L), .Label = c("xx",
"yy"), class = "factor"), produit = c(1L, 1L, 2L, 2L, 2L)), class = "data.frame", row.names = c(NA,
-5L))

auxi <- ave(tab$produit, tab$id, FUN = function(x) length(unique(x))<1.5)
tab[auxi > 0.5,]

# ou
library(dplyr)
tab %>% group_by(id) %>% filter(n_distinct(produit)<1.5)
Cordialement,
Maxime

Natacha Biset
Messages : 8
Enregistré le : 14 Nov 2018, 14:34

Re: Utilisation fonction duplicated

Messagepar Natacha Biset » 15 Nov 2018, 15:27

Merci pour cette réponse.
Comme dis plus tôt je n'ai pas l'habitude d'utiliser R. J''ai simplifié les infos pour exposer mon problème mais en réalité j'ai plus d'une centaine de produits différents avec des codes aléatoires de 7 chiffres. Comment est-ce que je pourrais appliquer la 2ème possibilité?

Encore merci !
Natacha

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Utilisation fonction duplicated

Messagepar Logez Maxime » 15 Nov 2018, 20:20

Re,

Pour que la communauté puisse te donner la réponse la plus adaptée à ta question il faut donner un exemple qui colle le plus à tes données, sinon tu auras une réponse trop simpliste.
Est-ce que tu peux nous donner une idée (sur 2 ou 3 produits) de la nature de ton jeu de données ?

Cordialement,
Maxime

Natacha Biset
Messages : 8
Enregistré le : 14 Nov 2018, 14:34

Re: Utilisation fonction duplicated

Messagepar Natacha Biset » 16 Nov 2018, 08:39

Voici un lien vers une capture de ma base de données : https://we.tl/t-qi2hL3Ocd6/
Donc la colonne "numano_beneficiaire" correspond à l'identifiant unique des personne et l'autre colonne qui m'intéresse pour "trier" ma base de données c'est "produit_pharma".

Merci beaucoup,

Natacha

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Utilisation fonction duplicated

Messagepar Logez Maxime » 16 Nov 2018, 10:55

re,

si ta base est uniquement structurée comme tu l'as montré alors je pense que le code que je t'ai proposé convient.
A la place de id tu mets numano_beneficiaire et a la place de produit tu mets produit_pharma.
Après tout dépend de ce que tu veux faire des autres données, notamment la date de délivrance et s'il y a des spécificités à prendre en compte avec le code 7 lettres.
Le code que je t'ai donné va rechercher si pour un bénéficiaire donné, il n'y a eu qu'un seul type de produit délivré. Si oui l'individu est conservé, si non alors il est rejeté.

Cordialement,
Maxime

Natacha Biset
Messages : 8
Enregistré le : 14 Nov 2018, 14:34

Re: Utilisation fonction duplicated

Messagepar Natacha Biset » 16 Nov 2018, 13:56

Merci pour ces précisions. Par contre j'ai un message d'erreur pourtant j'ai bien installé le package dplyr. Voici mon code et ce que j'obtiens :

> library(dplyr)

Attachement du package : ‘dplyr’

The following objects are masked from ‘package:stats’:

filter, lag

The following objects are masked from ‘package:base’:

intersect, setdiff, setequal, unionpath
> path <- "C:/Users/Natacha/Google Drive/ULB/Doc/03 - Données/033 Donnees brutes/"
> setwd(path)
> #read data
> data_r03 <- read.csv2(paste0(path,"sampledatabase.csv"))
> data_r03 <- tab %>% group_by(numano_beneficiaire) %>% filter(n_distinct(produit_pharma)<1.5)
Error in eval(expr, envir, enclos) : object 'tab' not found

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Utilisation fonction duplicated

Messagepar Logez Maxime » 16 Nov 2018, 14:00

re,

"tab" fait référence au nom du data.frame qui contient tes données.
Le mien s'appelait tab d'où la ligne de commande que j'avais écrite.
Remplace tab par data_r03 dans ton cas.

Cordialement,
Maxime

Natacha Biset
Messages : 8
Enregistré le : 14 Nov 2018, 14:34

Re: Utilisation fonction duplicated

Messagepar Natacha Biset » 16 Nov 2018, 14:16

Oups, voilà ça fonctionne très bien maintenant.
Merci beaucoup pour tes explications et ta patience ! :)

Cordialement,

Natacha


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité