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 :

Recodage de PLUSIEURS variables


Sujet :

R

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 11
    Points : 3
    Points
    3
    Par défaut Recodage de PLUSIEURS variables
    Bonjour
    Je souhaite recoder plusieurs variables prises par R par défaut comme "numéric" alors que ce sont des "factors" de 0 ou de 1.
    Je le fais pour une seule variable avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    > data$variable1<-as.factor(data$variable1)
    et ça marche! Mais j'en ai 50 à faire comme ça!
    J'essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >data[c(1:50)]<-as.factor(data[c(1:50)]
    mais ça marche pas: R mets un "+" en invite de commande et je sais pas quoi en faire..
    Alors avec le temps que j'ai déjà perdu à chercher comment faire pour la beauté du geste j'y serais déjà arrivé à l'heure qu'il est mais c'est une question de principe !
    Je suis preneur de toute solution, alternative, explication!
    Merci d'avance

  2. #2
    Membre actif Avatar de Alpacky
    Homme Profil pro
    .
    Inscrit en
    Mars 2014
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Mars 2014
    Messages : 99
    Points : 200
    Points
    200
    Par défaut
    R met un plus car il manque une parenthèse à la fin de votre ligne de code donc il attend la fermeture;
    Afin de transformer plusieurs colonnes vous pouvez utiliser la fonction lapply(df, as.factor) qui appliquera la fonction as.factor à chaque colonne de df;

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    Merci pour cette réponse
    Effectivement pour la parenthèse: le truc c'est que quand je la mets et complète ma ligne, R recode ces variables en chr!....incompréhensible à mon niveau
    Sinon lapply fonctionne très bien c'est vrai pour toutes les variables / colonnes du data.frame mais je souhaite ne l'appliquer qu'à certaines (et plusieurs) d’entre elles...

  4. #4
    Membre actif Avatar de Alpacky
    Homme Profil pro
    .
    Inscrit en
    Mars 2014
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Mars 2014
    Messages : 99
    Points : 200
    Points
    200
    Par défaut
    je pensais que vous auriez appliquer votre methode de sélection des colonnes....
    voila un exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    test <- data.frame( a = c(0,1,1,0), b = c(0, 1, 0, 1), c = c(4, 3, 2, 1))
    test[1:2] <- lapply(test[c("a","b")], as.factor)  # j'ai mis deux façons différentes d'appeler les mm col pour l'exemple

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    Top!!
    J'ai utilisé la 2ieme qui me semblait plus simple pour appliquer la fonction à de nombreuses variables qui se suivaient (genre de la 15ième à la 42ième)
    pour cette fonction lapply je comprends pas le "l" pour lenght je sais mais bon..en même temps je m'y suis mis hier à R donc bon!!
    D'ailleurs je me demande aussi pourquoi avec ma première syntaxe ca marchait pas et en plus ca me recoder les variables en chr...bref!!!
    Encore merci

  6. #6
    Membre actif Avatar de Alpacky
    Homme Profil pro
    .
    Inscrit en
    Mars 2014
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Mars 2014
    Messages : 99
    Points : 200
    Points
    200
    Par défaut
    il y a beaucoup de bonnes ressources en ligne pour bien comprendre R et de nombreux moocs aussi! il y a un mm un package appelé swirl qui permet d'apprendre à se servir de R!

    sinon pour lapply, je ne suis pas certain d'avoir compris votre question, mais si c'est pourquoi cela s'appelle 'l'apply c'est pour list-apply, un data.frame est un cas particulier de list (qui est un objet de R) (cf. help des fonctions apply)

    pour comprendre pourquoi votre première syntaxe ne fonctionne pas vous pouvez regarder comment sont codées les fonctions as.factor et factor en les écrivant dans la console R ou plus simplement lire l'help de la fonction ?as.factor ou sur internet https://stat.ethz.ch/R-manual/R-deve...ml/factor.html.

    simplement la fonction attend un vecteur et vous lui fournissez un objet qui n'est pas un vecteur donc elle transforme cette object en vecteur via as.character (d'ou les character) et transforme ensuite en facteur ce vecteur

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    -pour lapply je pensais après avoir consulté l'aide que le "l" devant apply c'était pour "lenght" et non pour "list" que je comprends mieux du coup.
    -concernant "chr" vous etes plus explicite que l'aide et je vous en remercie.

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    En fait mon recodage n'a pas si bien fonctionné:
    Quand j'importe mon fichier, R code par défaut ma variable "Tas" en variable factor.
    Si je la recode en numeric car c'est une variable quantitative, il change toutes les valeurs de chaque observation....
    Images attachées Images attachées  

  9. #9
    Membre actif Avatar de Alpacky
    Homme Profil pro
    .
    Inscrit en
    Mars 2014
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Mars 2014
    Messages : 99
    Points : 200
    Points
    200
    Par défaut
    serait-il possible d'avoir les 6 premières lignes du fameux fichier ? ce serait plus simple d'avoir un extrait des données pour pouvoir tester!
    la conversion facteur => numeric n'est pas directe: voir l'help de la fonction et particulièrement la section warning https://stat.ethz.ch/R-manual/R-deve...ml/factor.html

    enfin pourquoi voulez vous transformer en facteur des 0 et des 1? quelle utilité ?

  10. #10
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    -dat est mon data.frame
    -la variable dat$tas apparaît par défaut en "factor" (cf capture), or c'est en soit, une variable quantitative: je cherche donc à la recoder en variable de type "numeric" avec la syntaxe habituelle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >dat$tas<-as.numeric(dat$tas)
    ce qui conduit à ce que l'on observe dans la capture du message précédent, d'où ma surprise et le découragement qui va avec.

    PS: je n'arrive pas à joindre le fichier Rdata ni csv en question: le gestionnaire de fichier me dit que ces formats ne sont pas autorisés
    Images attachées Images attachées  

  11. #11
    Membre actif Avatar de Alpacky
    Homme Profil pro
    .
    Inscrit en
    Mars 2014
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Mars 2014
    Messages : 99
    Points : 200
    Points
    200
    Par défaut
    Premièrement, il n'y pas lieu d'être découragé, je viens de vous donner un lien qui explique que la technique classique as.numeric("un facteur") ne fonctionnera pas. Il faut donc procéder autrement, heureusement cela est indiqué dans le même lien.

    Ensuite, il y a une option stringsAsFactors qui permet de ne pas convertir les strings en factors, cf l'help https://www.rdocumentation.org/packa...ics/read.table! Donc quand vous lirez vos données les colonnes facteurs apparaitront en character mais toujours pas en numéric car pour R tous les éléments ne sont pas tous des nombres. Pour le comprendre il suffit de regarder les niveaux de vos facteurs : par exemple tas ou anciennete. Parfois vous avez un facteur qui vaut "12,4" il faut donc revoir la façon dont vous importer les données. D'après votre appel de fonction vous avez un tsv donc la "," indique surement la partie décimale? Si c'est le cas en R c'est un "." et non une ",", qu'il faut utiliser. Il faut donc le préciser avec un argument que vous trouverez aussi dans l'help de la fonction et qui (surprise) s'appelle dec et a une valeur par défaut dec = ".".

    Généralement, pour travailler sur les données c'est plus simple de ne pas avoir une photo car on ne peut pas copier coller les données..

  12. #12
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    désolé j'ai pas encore les bons réflexes ...et merci je vais voir tout ça!

  13. #13
    Membre actif Avatar de Alpacky
    Homme Profil pro
    .
    Inscrit en
    Mars 2014
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Mars 2014
    Messages : 99
    Points : 200
    Points
    200
    Par défaut
    Ne le prenez pas mal, c'est une bonne chose de poser des questions mais ce que je voulais souligner c'est que certainement des gens se sont posés la même question que vous (donc un thread doit deja exister) ou de bien vous référer aux helps de fonction (même si ils sont parfois cryptiques) et enfin de mettre qqs données pour que l'on puisse facilement vous aider !
    bon courage

  14. #14
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    J'avoue avoir du mal avec help() mais j'ai finalement pu:
    - effectivement limiter ce que R prenait pour des "factor" en arrondissant à l'entier quelques valeurs décimales (pas très casse mais la prochaine fois ce sera plus mieux)
    - convertir les "factor" en numeric": il fallait d'abord recoder a variable "factor" en "character" avec as.character() puis recoder la variable obtenue en "numeric" avec as.numeric() (d'après le site anglophone R for "dummies" qui explique la notion de fonction emboitées qui crée ce "problème" de recodage.

Discussions similaires

  1. Affecter la même valeur à plusieurs variables
    Par K20 dans le forum Langage
    Réponses: 7
    Dernier message: 03/01/2006, 23h54
  2. Plusieurs variables dans Dim et Case??
    Par samlepiratepaddy dans le forum Access
    Réponses: 2
    Dernier message: 02/10/2005, 18h04
  3. Envoyer plusieur variable a un programme
    Par scaleo dans le forum Langage
    Réponses: 9
    Dernier message: 06/09/2005, 11h09
  4. envoyer plusieurs variables dans l'url?
    Par brgui dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 18/08/2005, 14h18
  5. Réponses: 5
    Dernier message: 28/04/2004, 16h06

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