Je dispose d'un jeu de données avec des mesures répétées d'individus pour plusieurs variables :
Code : Tout sélectionner
ID Cat Site Day Hour Sex Tarsus
1 8384928 Background AT 20/01/2020 11:14:33 F 21,85
2 8384928 2_GT_M AT 20/01/2020 11:27:26 F 21,85
3 8384928 1_BT AT 20/01/2020 15:32:03 F 21,85
4 8384928 Background AT 21/01/2020 09:44:13 F 21,85
5 8384928 Background AT 21/01/2020 09:44:16 F 21,85
6 8384928 Background AT 21/01/2020 09:44:24 F 21,85
7 8384928 Background AT 21/01/2020 10:12:36 F 21,85
8 8384931 2_GT_M AT 20/01/2020 14:13:53 M 22,10
9 8384931 Background AT 20/01/2020 14:31:00 M 22,10
10 8384931 2_GT_M AT 21/01/2020 11:34:48 M 22,10
11 8384931 2_GT_M AT 21/01/2020 13:16:59 M 22,10
12 8384931 2_GT_M AT 21/01/2020 13:17:15 M 22,10
13 8384931 1_BT AT 21/01/2020 13:17:20 M 22,10
14 8384931 1_GT_F AT 21/01/2020 15:22:30 M 22,10
15 8384931 1_GT_F AT 21/01/2020 15:50:02 M 22,10
16 8384933 Background AU 19/01/2020 11:02:28 F 21,40
17 8384933 1_GT_F AU 19/01/2020 13:43:50 F 21,40
18 8384933 2_GT_M AU 19/01/2020 14:42:44 F 21,40
19 8384933 2_GT_M AU 19/01/2020 14:42:47 F 21,40
20 8384933 1_BT AU 20/01/2020 14:42:19 F 21,40
21 8384933 2_GT_M AU 21/01/2020 11:43:19 F 21,40
22 8384933 2_GT_M AU 21/01/2020 11:43:22 F 21,40
23 8384933 Background AU 21/01/2020 13:09:15 F 21,40
24 8384933 Background AU 21/01/2020 13:09:18 F 21,40
Dont le contenu est :
Code : Tout sélectionner
db <- structure(list(ID = c(8384928L, 8384928L, 8384928L, 8384928L,
8384928L, 8384928L, 8384928L, 8384931L, 8384931L, 8384931L, 8384931L,
8384931L, 8384931L, 8384931L, 8384931L, 8384933L, 8384933L, 8384933L,
8384933L, 8384933L, 8384933L, 8384933L, 8384933L, 8384933L),
Cat = c("Background", "2_GT_M", "1_BT", "Background", "Background",
"Background", "Background", "2_GT_M", "Background", "2_GT_M",
"2_GT_M", "2_GT_M", "1_BT", "1_GT_F", "1_GT_F", "Background",
"1_GT_F", "2_GT_M", "2_GT_M", "1_BT", "2_GT_M", "2_GT_M",
"Background", "Background"), Site = c("AT", "AT", "AT", "AT",
"AT", "AT", "AT", "AT", "AT", "AT", "AT", "AT", "AT", "AT",
"AT", "AU", "AU", "AU", "AU", "AU", "AU", "AU", "AU", "AU"
), Day = c("20/01/2020", "20/01/2020", "20/01/2020", "21/01/2020",
"21/01/2020", "21/01/2020", "21/01/2020", "20/01/2020", "20/01/2020",
"21/01/2020", "21/01/2020", "21/01/2020", "21/01/2020", "21/01/2020",
"21/01/2020", "19/01/2020", "19/01/2020", "19/01/2020", "19/01/2020",
"20/01/2020", "21/01/2020", "21/01/2020", "21/01/2020", "21/01/2020"
), Hour = c("11:14:33", "11:27:26", "15:32:03", "09:44:13",
"09:44:16", "09:44:24", "10:12:36", "14:13:53", "14:31:00",
"11:34:48", "13:16:59", "13:17:15", "13:17:20", "15:22:30",
"15:50:02", "11:02:28", "13:43:50", "14:42:44", "14:42:47",
"14:42:19", "11:43:19", "11:43:22", "13:09:15", "13:09:18"
), Sex = c("F", "F", "F", "F", "F", "F", "F", "M", "M", "M",
"M", "M", "M", "M", "M", "F", "F", "F", "F", "F", "F", "F",
"F", "F"), Tarsus = c("21,85", "21,85", "21,85", "21,85",
"21,85", "21,85", "21,85", "22,10", "22,10", "22,10", "22,10",
"22,10", "22,10", "22,10", "22,10", "21,40", "21,40", "21,40",
"21,40", "21,40", "21,40", "21,40", "21,40", "21,40")), class = "data.frame", row.names = c(NA,
-24L))
Je souhaite simplifier ce jeu de données selon les modalités de la variable Cat en faisant :
1) Regroupement des lignes du dataframe avec une ligne par modalité pour chaque individu
2) Pour les variables autres que ID & Cat, recopier les valeurs de la 1ère mesure de chaque modalité pour chaque individu (si modalité absente, indiquer NA)
3) Calcul du nombre de mesures (= nombre de lignes) par modalité pour chaque individu et stockage dans une nouvelle variable
Voici ce que cela pourrait donner avec l'exemple ci-dessus :
Code : Tout sélectionner
ID Cat Site Day Hour Sex Tarsus Nb
1 8384928 Background AT 20/01/2020 11:14:33 F 21,85 5
2 8384928 2_GT_M AT 20/01/2020 11:27:26 F 21,85 1
3 8384928 1_BT AT 20/01/2020 15:32:03 F 21,85 1
4 8384928 1_GT_F <NA> <NA> <NA> <NA> <NA> 0
5 8384931 Background AT 20/01/2020 14:31:00 M 22,10 1
6 8384931 2_GT_M AT 20/01/2020 14:13:53 M 22,10 4
7 8384931 1_BT AT 21/01/2020 13:17:20 M 22,10 1
8 8384931 1_GT_F AT 21/01/2020 15:22:30 M 22,10 2
9 8384933 Background AU 19/01/2020 11:02:28 F 21,40 3
10 8384933 2_GT_M AU 19/01/2020 14:42:44 F 21,40 4
11 8384933 1_BT AU 20/01/2020 14:42:19 F 21,40 1
12 8384933 1_GT_F AU 19/01/2020 13:43:50 F 21,40 1
4) Dans un deuxième temps (pour d'autres analyses), je souhaite organiser ce nouveau tableau sur le principe d'un tableau de contingence avec :
- 1 ligne = 1 individu
- 1 colonne = 1 modalité de la variable Cat
Voici ce que cela pourrait donner avec l'exemple ci-dessus :
Code : Tout sélectionner
X Background X2_GT_M X1_BT X1_GT_F
1 8384928 5 1 1 0
2 8384931 1 4 1 2
3 8384933 3 4 1 1
Je ne suis pas très à l'aise avec R et si ma demande me paraît simple en théorie, je ne sais pas si c'est faisable en réalité ! Pour le point 3), j'ai utilisé la fonction table() mais je ne parviens pas à stocker mon résultat dans un nouveau tableau synthétique (point 1 et 2).
Merci d'avance pour vos conseils !!
Thomas