Tableau croisé dynamique sous R

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

khaoula gammoudi
Messages : 43
Enregistré le : 22 Jan 2013, 16:48

Tableau croisé dynamique sous R

Messagepar khaoula gammoudi » 18 Mar 2017, 20:44

Bonsoir,
J'ai mon tableau sous la forme suivante:

Code : Tout sélectionner

> read.csv('D:/essai_rca.csv', header = TRUE, sep = ";")
   Reporter.ISO Commodity.Code Mcp
1            TN              1   1
2            TN              2   0
3            TN              3   0
4            TN              4   1
5           DZA              1   1
6           DZA              2   1
7           DZA              3   0
8           DZA              4   1
9            FR              1   0
10           FR              2   1
11           FR              3   1
12           FR              4   0



J'aimerais construire un tableau croisé dynamique comme l'on peut obtenir sous excel:
En ligne: la colonne Reporter.ISO
En colonne: la colonne Commodity.Code
En valeur: la colonne Mcp (càd la valeur de Mcp pour chaque croisement entre les 2 colonnes précitées et la somme totale en ligne et en colonne)
Le tableau sera sous la forme suivante:

Code : Tout sélectionner

      
   DZA   FR   TN   Total
1      1   0   1   2
2      1   1   0   2
3      0   1   0   1
4      1   0   1   2
Total   3   2   2   7



Y a-t-il une solution sous R?
Merci d'avance :)
gammoudi

Victor Cazalis
Messages : 68
Enregistré le : 24 Aoû 2014, 06:19

Re: Tableau croisé dynamique sous R

Messagepar Victor Cazalis » 19 Mar 2017, 10:12

Bonjour,

Une fonction qui permet de faire des tableaux croisés est la fonction table. Si on utilise avec un seul argument, elle permet de calculer le nombre d'occurrences de chaque modalité. Si on utilise deux arguments, elle fait un tableau croisé dynamique.

Si vous avez stocké votre data frame dans un objet nommé df, voilà un code qui devrait fonctionner :

Code : Tout sélectionner

t<-table(df$Mcp,df$Reporter.ISO)
addmargins(t)



Le fonction addmargins ajoute les marges avec les sommes

Bonne journée, Victor

Serge Rapenne
Messages : 1426
Enregistré le : 20 Aoû 2007, 15:17
Contact :

Re: Tableau croisé dynamique sous R

Messagepar Serge Rapenne » 19 Mar 2017, 11:39

Bonjour,

Un solution avec les packages tidyr et dplyr :

Code : Tout sélectionner

#si le jeu de données s'appelle dta

library(tidyr)
library(dplyr)

dta %>% spread(Reporter.ISO,Mcp) %>% select(-Commodity.Code) %>% mutate(Total=rowSums(.)) %>% rbind(.,Total=colSums(.))
     DZA FR TN Total
1       1  0  1     2
2       1  1  0     2
3       0  1  0     1
4       1  0  1     2
Total   3  2  2     7


Serge

khaoula gammoudi
Messages : 43
Enregistré le : 22 Jan 2013, 16:48

Re: Tableau croisé dynamique sous R

Messagepar khaoula gammoudi » 19 Mar 2017, 18:10

Merci bien, ça marche avec les packages tidyr et dplyr
gammoudi

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

Re: Tableau croisé dynamique sous R

Messagepar Logez Maxime » 20 Mar 2017, 09:04

Bonjour,

Une autre possibilité sans passer par ces deux packages :

Code : Tout sélectionner

addmargins(xtabs(Mcp ~ Commodity.Code + Reporter.ISO, data = tab))
              Reporter.ISO
Commodity.Code DZA FR TN Sum
           1     1  0  1   2
           2     1  1  0   2
           3     0  1  0   1
           4     1  0  1   2
           Sum   3  2  2   7
Avec les deux packages je ferai plutôt :

Code : Tout sélectionner

tab %>% spread(Reporter.ISO, Mcp) %>% mutate(Total = rowSums(.[-1])) %>% rbind(.,c("Total", colSums(.[-1])))
Sinon je pense que le code n'est pas générique et si le nom des lignes ne correspond pas aux modalités de Commodity.Code alors on risque de perdre cette information.
Cordialement,
Maxime

Stéphane Adamowicz
Messages : 206
Enregistré le : 07 Mar 2012, 10:13
Contact :

Re: Tableau croisé dynamique sous R

Messagepar Stéphane Adamowicz » 20 Mar 2017, 13:33

Bonjour,

je ne peux m'empêcher d'ajouter mon grain de sel aux excellentes réponses apportées ici. Le tableau généré ici s'appelle très exactement un tableau de contingence dans tous les manuels de statistiques. En effet, il énumère les contingents de chaque modalité, ou de chaque croisement de modalités. Dans R, ils n'ont rien de dynamique.

Excel propose des tableaux croisés dynamiques (nommés pilotes de données dans OpenOffice) qui ne sont pas forcément des tableaux de contingence; ils peuvent concerner des moyennes croisées, par exemple, et ils sont dynamiques parce-qu'il est possible de les rafraîchir automatiquement à chaque modification des données source.

cordialement,

Stéphane
Stéphane Adamowicz
INRA, UR 1115 Plantes et Systèmes de Culture Horticoles (PSH)
domaine St Paul, site agroparc
84914 Avignon, cedex 9

khaoula gammoudi
Messages : 43
Enregistré le : 22 Jan 2013, 16:48

Re: Tableau croisé dynamique sous R

Messagepar khaoula gammoudi » 21 Mar 2017, 10:18

Merci pour vous tous :)
gammoudi

Julien Demeaux
Messages : 49
Enregistré le : 23 Oct 2017, 22:24

Re: Tableau croisé dynamique sous R

Messagepar Julien Demeaux » 11 Nov 2017, 21:37

Bonjour à tous,
Je reprends ce sujet puisque ma question vient en prolongement.
J'ai créé deux tableaux de contingences avec des étiquettes de lignes identiques. Comment en faire un dataframe en conservant les lignes et en intégrant en colonne les sommes des 2 tableaux de contingence ?
Merci

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

Re: Tableau croisé dynamique sous R

Messagepar Pierre-Yves Berrard » 13 Nov 2017, 07:44

Voir l'aide des fonctions addmargins pour les totaux et cbind pour mettre côte à côte les deux tableaux.
PY

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

Re: Tableau croisé dynamique sous R

Messagepar Logez Maxime » 13 Nov 2017, 08:53

Bonjour,

si tes deux tableaux de contingences ont exactement les mêmes lignes et les mêmes colonnes :

Code : Tout sélectionner

# en reprenant l'exemple de ce fil
d1 <- xtabs(Mcp ~ Reporter.ISO + Commodity.Code, dta)
d2 <- xtabs(Mcp ~ Reporter.ISO + Commodity.Code, dta)

d3 <- addmargins(d1+d2)
class(d3) <- "matrix"
d3 <- as.data.frame(d3)
Cordialement,
Maxime

Julien Demeaux
Messages : 49
Enregistré le : 23 Oct 2017, 22:24

Re: Tableau croisé dynamique sous R

Messagepar Julien Demeaux » 16 Nov 2017, 21:16

Merci pour votre aide !

mafab francoise
Messages : 25
Enregistré le : 01 Avr 2018, 16:14

Re: Tableau croisé dynamique sous R

Messagepar mafab francoise » 16 Avr 2019, 16:28

Bonjour à tous et merci d'avance pour votre aide
Je souhaiterai effectuer un tableau de contingence avec 3 variables:
Le comportement : donnée qualitative : mange repos ou cache
Sites : j'ai trois sites. et Mois
voici mon script , je souhaiterai passer d'un tableau effectif à un tableau pourcentage, j'y arrive avec 2 variables mais lorsque j'ajoute ma 3 eme variable j'ai un code erreur :
Error in `[.default`(tab, rowSums(tab) > 0, colSums(tab) > 0, drop = FALSE) :
incorrect number of dimensions


voici mon script : je me sers du packages questionr
tableau=table(Comportement,Mois,Sites); tableau
lprop(tableau)

et ça ne marche pas ,

j'ai essayé avec un autre script :

tab<-table(Comportement,Mois,Sites)
tab
addmargins(tab)
prop.table(tab,2)
j'ai le bon tableau d'effectif mais dès que je passe en pourcentage je n'ai pas 100 %

Merci beaucoup

Marine

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

Re: Tableau croisé dynamique sous R

Messagepar Pierre-Yves Berrard » 17 Avr 2019, 07:37

mafab francoise a écrit :j'ai essayé avec un autre script :

tab<-table(Comportement,Mois,Sites)
tab
addmargins(tab)
prop.table(tab,2)
j'ai le bon tableau d'effectif mais dès que je passe en pourcentage je n'ai pas 100 %


Bonjour,
Et en exécutant prop.table() avant addmargins() ?
PY

mafab francoise
Messages : 25
Enregistré le : 01 Avr 2018, 16:14

Re: Tableau croisé dynamique sous R

Messagepar mafab francoise » 17 Avr 2019, 08:14

Bonjour,
oui j'ai essayé ça ne me donne pas les bons résultats également

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

Re: Tableau croisé dynamique sous R

Messagepar Pierre-Yves Berrard » 17 Avr 2019, 08:33

Un petit exemple qui reproduit l'"erreur" que vous constatez serait le bienvenu.
PY


Retourner vers « Questions en cours »

Qui est en ligne

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