Je viens à nouveau faire appel à vous car je suis bloquée dans une analyse.
J'ai un tableau avec trois colonnes. La première correspond a des individus, la deuxième à leur statut (1 vs 2), et la troisième indique une valeur yes/no.
Code : Tout sélectionner
ind=c("a","b","c","d","e","f","g","a","b","e","a","c","h")
stat=c("1","2","2","1","1","2","2","1","2","1","1","2","1")
present=c("yes","yes","no","yes","no","yes","no","yes","no","no","no","yes","no")
tab=data.frame(ind,stat,present)
ind stat present
1 a 1 yes
2 b 2 yes
3 c 2 no
4 d 1 yes
5 e 1 no
6 f 2 yes
7 g 2 no
8 a 1 yes
9 b 2 no
10 e 1 no
11 a 1 no
12 c 2 yes
13 h 1 no
Je souhaite calculer le % d'individus unique portant un yes / no en fonction de leur statut.
Pour cela, je groupe les individus par statut, ensuite je les groupe par yes/no puis j'enlève les lignes pour lesquelles j'ai un "doublon" individu, je compte tout ça mais ensuite j'ai un problème pour calculer le pourcentage car je veux le % en fonction du statut mais en prenant en compte tous les individus uniques de chaque statut. En gros je veux que le sum(n) de mon calcule de % (voir dernière dernière ligne) soit égale à 4 (voir deuxième code) et non à 3+2 et 3+3 comme ce serait le cas avec le sum(n). Le problème c'est que il y a des individus qui seraient compté deux fois dans ce cas car ils sont à la fois dans le yes et à la fois dans le no (exemple: individu a). Je voulais pouvoir à nouveau enlever les doublons après avoir dégroupé, et regroupé par status mais je n'ai plus accès à la colonne ind pour enlever les doublons.
Auriez vous une idée pour m'aider à résoudre ce problème,
Code : Tout sélectionner
library(tidyverse)
tab3 = tab %>%
group_by(stat)%>%
group_by(present, .add = TRUE)%>%
distinct(ind, .keep_all = TRUE) %>%
count() %>%
ungroup() %>%
group_by(stat) %>%
mutate(pct = round(n/sum(n)*100,2),)
stat present n
<chr> <chr> <int>
1 1 no 3
2 1 yes 2
3 2 no 3
4 2 yes 3
Code : Tout sélectionner
tab2 = tab %>%
group_by(stat)%>%
distinct(ind, .keep_all = TRUE) %>%
count()
stat n
<chr> <int>
1 1 4
2 2 4
Merci d'avance
Bien cordialement
Aline