1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    juin 2017
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 23
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : juin 2017
    Messages : 20
    Points : 13
    Points
    13

    Par défaut Tri croisé (2 variables)

    Bonjour à tous, j'ai un data.frame rescenssant les interactions sur un page web des utilisateurs.
    J'ai en colonne 1 : le nom de l'utilisateur (df$User.Name), en colonnes 2 et 3 les infos sur l'interaction, en colonne 4 le nom du site/journal (df$page).

    J'aimerai compter combien d'utilisateurs ont fait plus de 100 interactions / entre 50 et 100 / moins de 50. Et ce, pour chacune des pages.

    J'aimerai donc en sortie un data.frame rempli des fréquences du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    page		Plus de 100     Entre 50 et 100    Moins de 100
    page1	      	              
    page2	
    page3	
    ...
    J'ai essayé avec la fonction table() cependant j'ai du mal a associer la page .
    J'ai essayé avec la fonction groupe_by() du package dyplr mais ca ne marche pas non plus ...

    Est ce que vous auriez une solution à mon problème ?
    Je vous remercie.

  2. #2
    Membre confirmé
    Inscrit en
    novembre 2009
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : novembre 2009
    Messages : 326
    Points : 624
    Points
    624

    Par défaut Tri croisé (2 variables)

    Bonjour,

    Je ne comprends pas ce que vous voulez faire. Pouvez-vous préciser votre demande par un exemple ?

    Cordialement,

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    juin 2017
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 23
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : juin 2017
    Messages : 20
    Points : 13
    Points
    13

    Par défaut

    J'ai un data.frame de milliers de lignes qui ressemble à ça :

    User.Name Type Text page
    MonsieurA commentaire bonjour LeMonde
    MonsieurA ... ... LeMonde
    MonsieurB ... ... LeMonde
    MonsieurC ... ... Lequipe
    MonsieurB ... ... LeMonde
    MonsieurA ... ... LeMonde
    MonsieurA ... ... LeMonde
    MonsieurA ... ... LeMonde
    ... ... ... ...

    à l'aide du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    res <- plyr::count(df,c("User.Name","page"))
    J'ai réussi à obtenir un tableau comme tel :

    User.Name page Freq
    MonsieurA LeMonde 5
    MonsieurB LeMonde 2
    MonsieurC Lequipe 1

    Seulement, étant donné que mon data.frame de départ est bien plus volumineux que mon exemple, ce dernier tableau (res) fournit des fréquences entre 1 et 150. J'aimerai compter, par page, le nombre d'utilisateurs ayant fait plus de 100 interactions, entre 50 et 100 et moins de 50 interactions.
    (En gros combien de lignes ont "LeMonde" et une Freq supérieur à 100, combien de lignes ont "LeMonde" et une Freq supérieur à 50 et inférieur à 100, ....ainsi de suite, pour toutes les pages.)

    Donc j'aimerai en sortie un tableau de ce style :

    Page Plus de 100 Entre 50 et 100 Moins de 50
    LeMonde X X X
    Lequipe X X X
    J'ai essayé de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    length(which(res$page=="LeMonde" && res$freq>100))
    length(which(res$page=="LeMonde" && res$freq<=100 && res$freq>50))
    length(which(res$page=="LeMonde" && res$freq<=50))
    Pareil pour Lequipe.

    Mais cela ne fonctionne pas...

    J'espère avoir été plus claire... c'est compliqué à expliquer...
    Je vous remercie.

  4. #4
    Membre confirmé
    Inscrit en
    novembre 2009
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : novembre 2009
    Messages : 326
    Points : 624
    Points
    624

    Par défaut Fréquence de fréquences

    Bonjour,

    C'est très clair, merci. Vous pouvez découper vos fréquences en catégories pour faire un nouveau tableau de fréquences :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    > res <- data.frame(User.Name=c("MonsieurA","MonsieurB","MonsieurC","MonsieurD"),
    +                  page=c("LeMonde","LeMonde","Lequipe","Lequipe"),
    +                   Freq=c(150,25,75,70))
    > res$Freq.cat <- cut(res$Freq,breaks=c(1,50,100,150),include.lowest=TRUE)
    > res
      User.Name    page Freq  Freq.cat
    1 MonsieurA LeMonde  150 (100,150]
    2 MonsieurB LeMonde   25    [1,50]
    3 MonsieurC Lequipe   75  (50,100]
    4 MonsieurD Lequipe   70  (50,100]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    > table(res$page,res$Freq.cat)
     
              [1,50] (50,100] (100,150]
      LeMonde      1        0         1
      Lequipe      0        2         0
    Cordialement,

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    juin 2017
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 23
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : juin 2017
    Messages : 20
    Points : 13
    Points
    13

    Par défaut

    Ca marche parfaitement ! je vous remercie.

    cependant, lorsque je transforme en data.frame avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    > res2 <- table(res$page,res$freq.cat)
    > res2 <- as.data.frame(res2)
    je me retrouve avec un tableau à 3 colonnes :
    Colonne 1 : la page / Colonne 2 : les classes / Colonne 3 : les fréquences.

    Alors que juste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table(res$page,res$freq.cat)
    me donne bien un tableau a 2 entrées avec les pages en lignes et les classes en colonnes...

  6. #6
    Membre confirmé
    Inscrit en
    novembre 2009
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : novembre 2009
    Messages : 326
    Points : 624
    Points
    624

    Par défaut Transposition

    Bonsoir,

    La représentation interne des données et l'affichage sont parfois différents. C'est aussi le cas dans SAS par exemple.

    Vous pouvez transposer le dataframe pour obtenir le même résultat qu'à l'affichage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    > res2 <- as.data.frame(table(res$page,res$Freq.cat))
    > res2
         Var1      Var2 Freq
    1 LeMonde    [1,50]    1
    2 Lequipe    [1,50]    0
    3 LeMonde  (50,100]    0
    4 Lequipe  (50,100]    2
    5 LeMonde (100,150]    1
    6 Lequipe (100,150]    0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    > library(reshape2)
    > dcast(res2, Var1~Var2, value.var="Freq")
         Var1 [1,50] (50,100] (100,150]
    1 LeMonde      1        0         1
    2 Lequipe      0        2         0
    Cordialement,

Discussions similaires

  1. Tri croisé - lecture de résultat
    Par cococmoi dans le forum SAS Base
    Réponses: 1
    Dernier message: 16/10/2013, 15h43
  2. [VxiR2] Tri sur une variable complexe
    Par SGA99 dans le forum Webi
    Réponses: 5
    Dernier message: 05/01/2011, 18h44
  3. Tri dans une variable
    Par franpom dans le forum Fonctions
    Réponses: 3
    Dernier message: 18/08/2009, 18h02
  4. [Tableaux] Tri d'une variable tableau multidimension
    Par sty255 dans le forum Fonctions
    Réponses: 2
    Dernier message: 19/12/2008, 09h56
  5. [VBA-E] Macro Pour Faire un Tri sur plage variable
    Par tabarly35 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/09/2006, 20h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo