Bonjour
j'ai un tableau de données avec des lignes redondantes pour lesquels j'ai différents résultats (différente espèces) concernant la culture de Campylobacter.
Je souhaite supprimer ces lignes redondantes mais récupérer le résultat et l'inscrire dans une nouvelle colonne.
Pour cela j'ai essayé de créer une boucle mais il semble que ma méthode de fonctionne pas.
Mon dataset se nomme "camp" avec l'identifiant des animaux se nommant "PETRIID" les résultats pour la culture de Campylobacter "Screening".
J'ai créer des colonnes supplémentaires pour chaque niveau de résulte (chaque espèce).
Pour info j'ai comme résultat à
Code : Sélectionner tout - Visualiser dans une fenêtre à part summary(camp)date.sampled clinic PETRIID Sex Age.days. Vaccination Breed
05/03/2014:102 Hamanskraal :112 D10 A : 2 : 66 Min. : 10.0 0 :254 Pitbull :189
12/11/2014: 84 Loate :226 D11 21-3: 2 F:251 1st Qu.: 46.0 1 :112 Crossbreed:155
02/12/2014: 52 Mamelodi :146 D11 24-2: 2 M:196 Median : 82.0 2 : 55 : 56
15/01/2014: 51 Sonskynehoekie: 29 D11-15 : 2 Mean : 247.2 3 : 54 Boerboel : 29
20/11/2013: 50 D11-20 : 2 3rd Qu.: 263.8 NA's: 38 Jack Rasel: 27
12/04/2014: 44 D11-32 : 2 Max. :3600.0 Staffie : 22
(Other) :130 (Other) :501 NA's :47 (Other) : 35
Screening
C. coli : 26
C. jejuni :138
C. upsalensies: 65
Negative :284
Camp Campcoli Campjejuni Campups
Min. :0.0000 Min. :0.00000 Min. :0.000 Min. :0.0000
1st Qu.:0.0000 1st Qu.:0.00000 1st Qu.:0.000 1st Qu.:0.0000
Median :0.0000 Median :0.00000 Median :0.000 Median :0.0000
Mean :0.4464 Mean :0.05068 Mean :0.269 Mean :0.1267
3rd Qu.:1.0000 3rd Qu.:0.00000 3rd Qu.:1.000 3rd Qu.:0.0000
Max. :1.0000 Max. :1.00000 Max. :1.000 Max. :1.0000
Pour retrouver mes duplicata j'ai fait
Ensuite j'essaie donc de mettre mes résultats de la ligne redondante (qui se trouve toujours en dessous de la ligne ayant le même identifiant) dans une nouvelle colonne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 which(duplicated(camp$PETRIID)) summary(camp[which(duplicated(camp$PETRIID)),]) camp[which(duplicated(camp$PETRIID)),c(3,4,7,8)]
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 for (i in which(duplicated(camp$PETRIID))) { camp[(i-1),camp$Campcoli]<-ifelse(camp[i,camp$Screening]=="C. coli",1,camp[(i-1),camp$Campcoli]) }Ne marche pas donc;Error in `[<-.data.frame`(`*tmp*`, (i - 1), camp$Campcoli, value = list( :
duplicate subscripts for columns
Si je fait comme si je créais une nouvelle colonne
je n'ai pas de message d'erreur mais quand je vérifie la colonne Campcoli2 n'existe pas et n'a pas été crée ce qui est peut être assez logique car elle n'a pas le même nombre de lignes que le dataframe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 for (i in which(duplicated(camp$PETRIID))) { camp[(i-1),camp$Campcoli2]<-ifelse(camp[i,camp$Screening]=="C. coli",1,camp[(i-1),camp$Campcoli]) }
J'ai alors essayé la fonction if et ensuite else
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 for (i in which(duplicated(camp$PETRIID))) { if(camp[i,camp$Screening]=="C. coli") {1}else({camp[(i-1),camp$Campcoli]}) }Bref si quelqu'un a une idée pour cette manipulation qui sous Excell est relativement simple avec la fonction "SI"There were 32 warnings (use warnings() to see them)
> warnings()
Messages d'avis :
1: In if (camp[i, camp$Screening] == "C. coli") { ... :
la condition a une longueur > 1 et seul le premier élément est utilisé
...
Par ailleurs pour supprimer ensuite mes duplicata j'ai essayé
et j'ai vérifier pour un certain duplicata
Code : Sélectionner tout - Visualiser dans une fenêtre à part campb<-camp[unique(camp$PETRIID),]
et je me rends compte que ça ne l'a pas enlevé mais d'autres lignes ont du être supprimée car j'ai bien 32 lignes de moins (nombre de mes duplicata)
Code : Sélectionner tout - Visualiser dans une fenêtre à part campb[campb$PETRIID=="D10 A",]
Si j'essaye
Ca marche.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 camp2<-camp[!duplicated(camp$PETRIID),] dim(camp2) camp2[camp2$PETRIID=="D10 A",]
Là aussi si quelqu'un peut me dire pourquoi la fonction "unique" ne fonctionne pas je suis preneur.
Merci d'avance
Eric
Partager