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 :

Sélection de colonne avec condition ?


Sujet :

R

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2015
    Messages : 54
    Points : 22
    Points
    22
    Par défaut Sélection de colonne avec condition ?
    Bonjour,

    Y aurait - il un moyen me permettant dans une boucle for de ne sélectionner que mes variables de format numérique ?
    Autrement, je devrais les écrire manuellement par moi - même.

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Janvier 2012
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2012
    Messages : 325
    Points : 888
    Points
    888
    Par défaut
    Utilise is.numeric

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2015
    Messages : 54
    Points : 22
    Points
    22
    Par défaut
    Edit : J'ai finalement réussi à isoler mes colonnes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    varnum <- sapply(df, is.numeric)
    Mon deuxième soucis étant à présent que j'aurais besoin de créer une boucle qui me permettrais d'appliquer un certain nombre de fois une fonction sur mes variables numériques. Mais mes valeurs sont aberrantes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    test <- data.frame(apply(df[varnum], 2 ,mean))

  4. #4
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Points : 2 673
    Points
    2 673
    Par défaut
    Bonjour,

    Qu'entendez-vous par "mes valeurs sont aberrantes" ?
    Pouvez-vous nous montrer à quoi ressemble votre sortie ? Et ce à quoi vous vous attendriez ?


    Cordialement,


    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2015
    Messages : 54
    Points : 22
    Points
    22
    Par défaut
    Bonjour,

    En recopiant manuellement chacune de mes colonnes numériques, le code ressemble à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    test <- data.frame(apply(df[,c("var1", "var2", "var3", "..." , "var149", "var150")], 2 ,mean))
    Et le résultat est le suivant :
    Nom : Manuellement.JPG
Affichages : 2178
Taille : 24,7 Ko



    Alors que quand je le fais automatiquement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    varnum <- sapply(df, is.numeric)
    test <- data.frame(apply(df[varnum], 2 ,mean))
    J'obtiens ceci :
    Nom : Automatique.JPG
Affichages : 2197
Taille : 24,2 Ko

  6. #6
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Points : 2 673
    Points
    2 673
    Par défaut
    Re-bonjour,

    Je ne sais pas si c'est une faute de frappe lors de l'écriture de votre message mais il me semble qu'il manque une virgule pour la sélection des colonnes du dataframe :
    Il faudrait plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    varnum <- sapply(df, is.numeric)
    test <- data.frame(apply(df[,varnum], 2 ,mean))

    Cordialement,


    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2015
    Messages : 54
    Points : 22
    Points
    22
    Par défaut
    df[,varnum] et df[varnum] renvoient exactement les mêmes valeurs. Les deux sélections sont identiques.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    > a <- df[,varnum] == df[varnum]
    > table(unique(a))
     
    TRUE 
     146

  8. #8
    Membre éclairé
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Janvier 2012
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2012
    Messages : 325
    Points : 888
    Points
    888
    Par défaut
    Il est préférable de ne pas mettre de virgule quand on veut extraire des colonnes.
    En effet la notation DF[i] renverra toujours une dataframe tandis que DF[,i] renverra un vecteur si une seule colonne est sélectionnée et une dataframe si plusieurs colonnes sont sélectionnées, ce qui pose souvent problème quand la longueur de i est inconnue.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2015
    Messages : 54
    Points : 22
    Points
    22
    Par défaut
    Cela est bon à savoir en tout cas, j'en prend note.

    Du coup, cette subtilité n'est pas lié à la différence de résultat obtenue. Savez vous quelle est t-elle ?

  10. #10
    Membre éclairé
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Janvier 2012
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2012
    Messages : 325
    Points : 888
    Points
    888
    Par défaut
    Il y a une erreur, soit dans le vecteur que tu rentres à la main, soit qu'une colonne que tu ne veux pas est sélectionnée par varnum, dans les deux cas ça dépend de tes données, qu'on n'a pas, donc on ne peut pas t'aider.



    Sinon plutôt que d'utiliser apply et mean, tu peux utiliser rowMeans pour simplifier (mais ça changera rien à ton problème).

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2015
    Messages : 54
    Points : 22
    Points
    22
    Par défaut
    Mes variables étant binaires pour la plupart, j'imagine qu'il y a un soucis dans mon varnum. Mais assez complexe apparemment.
    Je ne parviens pas à voir la différence entre les deux jeux de données.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    a <- df[,c("var1", "var2", ..., "var145")]
     
    b <- df[varnum] 
    b <- b[,-1] #suppression de la variable X en trop
    b <- b[,c("var1", "var2", ..., "var145")] #mise en forme tel que les colonnes soient dans un ordre identique dans a comme dans b.
     
    c <- a == b 
    table(unique(c))]
     
    TRUE 
     145

    J'avais déjà essayé la fonction colMeans mais elle retourne les mêmes résultats, oui.

  12. #12
    Membre confirmé
    Inscrit en
    Mars 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 208
    Points : 461
    Points
    461
    Par défaut
    Hello,

    Les deux tableaux que tu renvois sont les même si tu enlèves les 8 premières lignes du deuxieme tableau.

  13. #13
    Membre éclairé
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Janvier 2012
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2012
    Messages : 325
    Points : 888
    Points
    888
    Par défaut
    Si tu as une colonne en trop dans b, elle est supprimée à la ligne 5 de ton code, donc normal que tu ne vois pas de différence.

  14. #14
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2015
    Messages : 54
    Points : 22
    Points
    22
    Par défaut
    Bonjour,

    Sengar, je ne comprend absolument pas ce que tu essayes de me dire :-/

    Theta, mes moyennes étant calculées colonnes par colonnes, je ne vois pas où peut être le soucis par rapport à ça.
    La 4ème ligne est pour le coup superflu mais le fait de modifier l'ordre de mes colonnes ne devrait pas avoir d'incidence sur les résultats de la sortie obtenue. J'essayais juste de mettre en évidence le fait que les deux jeux de données sont identiques.

  15. #15
    Membre confirmé
    Inscrit en
    Mars 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 208
    Points : 461
    Points
    461
    Par défaut
    Citation Envoyé par Mac_Leod Voir le message

    Sengar, je ne comprend absolument pas ce que tu essayes de me dire :-/
    Regarde attentivement les deux tableaux ci dessous.

    Ils renvoient les même valeurs si tu enlèves 8 premières lignes du deuxieme tableau.
    Dans ton code où tu rentres les noms de variables manuellement, tu as du oublier les 8 premieres variables c'est tout.

    En gros, il n'y a pas de valeur aberrantes, tu n'es juste pas sur le même nombre de variables.


    En recopiant manuellement chacune de mes colonnes numériques, le code ressemble à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    test <- data.frame(apply(df[,c("var1", "var2", "var3", "..." , "var149", "var150")], 2 ,mean))
    Et le résultat est le suivant :
    Nom : Manuellement.JPG
Affichages : 2178
Taille : 24,7 Ko



    Alors que quand je le fais automatiquement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    varnum <- sapply(df, is.numeric)
    test <- data.frame(apply(df[varnum], 2 ,mean))
    J'obtiens ceci :
    Nom : Automatique.JPG
Affichages : 2197
Taille : 24,2 Ko

Discussions similaires

  1. [VBA-E] Minimum d'une colonne avec condition sur autre colonne
    Par Currahee dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/05/2007, 18h01
  2. [VBA-E] Suppression des colonnes avec condition
    Par desdenova dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/02/2007, 14h39
  3. [Oracle] Update sur 1 colonne avec condition existence (SUBSTR)
    Par magic charly dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/04/2006, 14h57
  4. nouvelle colonne avec condition
    Par evaness dans le forum Access
    Réponses: 6
    Dernier message: 06/09/2005, 17h35
  5. Sélection multi table avec condition
    Par iuz dans le forum Langage SQL
    Réponses: 8
    Dernier message: 05/05/2004, 16h04

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