IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

tri des variables par nombre d'observations distinctes


Sujet :

R

  1. #1
    Futur Membre du Club Avatar de Morkay
    Homme Profil pro
    Programmeur SAS se mettant à R
    Inscrit en
    Février 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Programmeur SAS se mettant à R

    Informations forums :
    Inscription : Février 2017
    Messages : 4
    Points : 5
    Points
    5
    Par défaut tri des variables par nombre d'observations distinctes
    Bonjour,

    débutant en R et nouveau sur le forum, voici ma question:

    J'ai un dataframe contenant x variables et y observations. Je souhaite faire un tri sur ces variables en fonction du nombre d'observations distinctes dans chaque variable.
    Mon but étant d'obtenir deux listes distinctes , une où le nombre d'observations distinctes est >=10 , puis celle où c'est <10 .

    J'ai donc trouvé une fonction qui me donne l'information pour l'ensemble de mon dataframe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    test <- data %>% summarise_each(funs(n_distinct))
    J'obtiens un dataframe du genre :

    x1 x2 x3 x4 x5 x6
    2 4 11 22 1 2

    Mais je ne sais pas comment utiliser ce résultat pour obtenir mes 2 listes.
    Je sais que c'est sans doute tout bête mais je bloque !

    Merci pour votre aide !

  2. #2
    Membre régulier
    Homme Profil pro
    Data Scientist
    Inscrit en
    Février 2017
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Data Scientist

    Informations forums :
    Inscription : Février 2017
    Messages : 28
    Points : 77
    Points
    77
    Par défaut
    Salut !

    Pour ce genre de questions, il est préférable d'y joindre un code reproductible afin que l'on puisse t'aider à répondre à ta question.
    Je pense voir de quoi tu veux parler. Pour te répondre, je vais dans un premier temps générer une base de données et j'y appliquerai ce que je pense être la solution à ton problème. Tu n'auras plus qu'à t'en inspirer.

    Code R : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    colonnes=6
    lignes=4
     
    Data=matrix(sample(5:15,colonnes*lignes,replace=TRUE),ncol=colonnes,nrow=lignes)
    Data=as.data.frame(Data)
     
    > Data
      V1 V2 V3 V4 V5 V6
    1  5 13  7  7 11 10
    2  8 10  9  8  8 12
    3 10  8 15  5 12  7
    4 11  5 10  5 10  6

    Donc voici à quoi ressemble les données.
    Toi tu veux savoir combien de valeurs sont supérieures à 10 dans chacune de tes colonnes. Rien de plus simple en utilisant la fonction apply()

    D'abord remarquons ce que ça fait quand on demande à ta base quelles valeurs sont supérieures à 10
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    > Data>=10
            V1       V2     V3       V4      V5      V6
    [1,] FALSE  TRUE FALSE FALSE  TRUE  TRUE
    [2,] FALSE  TRUE FALSE FALSE FALSE  TRUE
    [3,]  TRUE FALSE  TRUE FALSE  TRUE FALSE
    [4,]  TRUE FALSE  TRUE FALSE  TRUE FALSE
    Il est facile de voir à quoi correspondent les valeurs TRUE et FALSE ici.
    Donc on va appliquer à chaque colonnes, une fonction qui compte le nombre de TRUE. Sur R, TRUE prend automatiquement la valeur 1 et FALSE la valeur 0. Donc on va simplement faire la somme de Data>=10 par colonnes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    > apply(Data>=10,2,sum)
    V1 V2 V3 V4 V5 V6 
     2  2  2  0  3  2 
    > apply(Data<10,2,sum)
    V1 V2 V3 V4 V5 V6 
     2  2  2  4  1  2
    Ici on applique la fonction somme à chaque colonne de Data<10.
    Si tu veux appliquer ça par lignes, tu remplaces le 2 par un 1.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    resume=data.frame(apply(Data>=10,2,sum),apply(Data<10,2,sum))
    names(resume)=c(">=10","<10")
    > resume
       >=10 <10
    V1    2   2
    V2    2   2
    V3    2   2
    V4    0   4
    V5    3   1
    V6    2   2
    Voici un résumé sous forme de tableau


    J'espère avoir répondu à ta question

  3. #3
    Futur Membre du Club Avatar de Morkay
    Homme Profil pro
    Programmeur SAS se mettant à R
    Inscrit en
    Février 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Programmeur SAS se mettant à R

    Informations forums :
    Inscription : Février 2017
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Bonsoir et merci pour votre réponse.
    C'est vrai que ma demande n'était pas très claire et que j'aurais dû présenter ça mieux que ça.
    Je vais donc essayer d'être plus précis :

    Tout d'avord, le but global de mon code est le suivant: Je veux créer une appli shiny dans laquelle je vais charger des dataframes, sans en connaitre préalablement le nom des variables.
    Je voudrais que cette application fasse donc un test sur chaque variables de mon dataframe le nombre d'occurences distinctes, afin que je puisse classer chaque variable en 2 catégories : continue ou catégorielle.
    Par exemple, disons que je crée ce dataframe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      df<- data.frame(ID=c(1,2,3,4,5,6,7,8),Taille=c(185,182,175,165,183,182,162,166),Sexe=c(1,1,0,0,1,0,0,1),groupe=c(1,2,3,3,2,1,3,1))
     
    > df
      ID Taille Sexe groupe
    1  1    185    1      1
    2  2    182    1      2
    3  3    175    0      3
    4  4    165    0      3
    5  5    183    1      2
    6  6    182    0      1
    7  7    162    0      3
    8  8    166    1      1
    J'ai donc 4 variables , dont je calcule le nb d'occurence distincte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    test <- df %>% summarise_each(funs(n_distinct))
     
    > test
      ID Taille Sexe groupe
    1  8      7    2      3
    Maintenant, je veux catégoriser chaque variable en 2 groupe : "n_distinct_row" =<3 et "n_distinct_row">3 , dans le but d'obtenir la liste des variables dans chaque catégorie et pouvoir trier mon dataframe de départ.

    J'espère avoir été un peu plus clair, en tout cas merci à ceux qui prendront le temps d'essayer de répondre , parce que je bloque grave alors que je suis persuadé que c'est tout bête, que peut-être même qu'une fonction existe pour faire ça.

  4. #4
    Membre régulier
    Homme Profil pro
    Data Scientist
    Inscrit en
    Février 2017
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Data Scientist

    Informations forums :
    Inscription : Février 2017
    Messages : 28
    Points : 77
    Points
    77
    Par défaut
    Merci, c'est beaucoup plus clair. Si je comprends bien ton problème, c'est super simple.

    Tu as juste à faire:

    Pour voir le nom de tes variables dont le nombre de modalités distinctes est supérieur ou égal à 3

    Pour faire la même chose mais pour tes variables dont le nombre de modalité est inférieur à 3

    Après tu peux extraire les variables que tu souhaites avec une manip de cette forme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    df[,names(test[,test>=3])]
    Ou beaucoup plus simplement:
    C'est la réponse à ta question ?

  5. #5
    Futur Membre du Club Avatar de Morkay
    Homme Profil pro
    Programmeur SAS se mettant à R
    Inscrit en
    Février 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Programmeur SAS se mettant à R

    Informations forums :
    Inscription : Février 2017
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Merci oui c'est bien ça que je voulais, et ça fonctionne !
    Je savais bien que c'était tout simple, et j'avais surement dû voir ça dans les quelques cours de bases que j'ai lu mais je bloquais la dessus !

    Encore merci pour cette aide précieuse !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Retourner des variables par références
    Par dorian53 dans le forum Langage
    Réponses: 3
    Dernier message: 21/11/2006, 14h19
  2. tri des dates par semaine
    Par syldudu dans le forum Access
    Réponses: 17
    Dernier message: 10/10/2006, 11h27
  3. Réponses: 4
    Dernier message: 26/05/2006, 17h17
  4. Réponses: 2
    Dernier message: 23/08/2005, 19h20

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