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 :

Factor de 0 et 1 qui se transforme en 1 et 2


Sujet :

R

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2017
    Messages : 10
    Points : 7
    Points
    7
    Par défaut Factor de 0 et 1 qui se transforme en 1 et 2
    Bonjour,

    Voilà. J'ai un dataframe qui contient plusieurs colonnes dont la colonne "x57" qui est un vecteur d'entiers qui sont égaux soit à 0 ou 1
    Je décide de transformer cette colonne en factor avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data$x57 <- as.factor(data$x57)
    Quand j'écris cette colonne dans un fichier avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    write(data$x57, file = "my_column.csv")
    Le fichier contient des 2 à la place des 1 et des 1 à la place des 0.

    Je n'ai pas ce problème si je ne fait pas de as.factor

    Comment expliquer ceci ?

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2017
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    En fait j'ai confondu label et level d'un factor. Je vais essayer de comprendre ça posément

  3. #3
    Membre éclairé
    Homme Profil pro
    Chercheur
    Inscrit en
    Décembre 2015
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 327
    Points : 793
    Points
    793
    Par défaut
    Le résultat est normal. La documentation de write le dit : les facteurs sont convertis en nombre avant d'être écrits. Ce qui est écrit dans le fichier est donc le codage interne du facteur qu'on obtient par la fonction mode.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    write(data$x57, file = "my_column.csv")
    # est équivalent à
    write( as.numeric( data$x57), file = "my_column.csv")
    Il faut écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    write( as.character( as.numeric( data$x57)), file = "my_column.csv")

  4. #4
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 276
    Points : 561
    Points
    561
    Par défaut
    Bonjour,

    Il y a une erreur ici : write( as.character( as.numeric( data$x57)), file = "my_column.csv"), il faut écrire : write( as.numeric( as.character( data$x57)), file = "my_column.csv").

    cdlt

  5. #5
    Membre éclairé
    Homme Profil pro
    Chercheur
    Inscrit en
    Décembre 2015
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 327
    Points : 793
    Points
    793
    Par défaut
    En effet, j'ai fait une erreur en écrivant mon code en reprenant le as.numeric à l'intérieur du as.character. Le code corrigé est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    write( as.character( data$x57), file = "my_column.csv")
    puisque as.character appliqué à un facteur donne les étiquettes (labels) associées à ce facteur. Ainsi le fichier contiendra bien les bonnes valeurs. Pour vérification
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    x <- factor( 0:1)
    x
    [1] 0 1
    Levels: 0 1
    as.numeric( x)
    [1] 1 2
    as.character( x)
    [1] "0" "1"
    Avec toutes mes excuses

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2017
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Entre temps j'ai trouvé une autre solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    write(levels(y_pred)[y_pred], file = "my_column.csv")

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

Discussions similaires

  1. Caractère -é- qui se transforme en -é-
    Par new-dmx dans le forum Langage
    Réponses: 18
    Dernier message: 25/09/2008, 13h11
  2. Réponses: 6
    Dernier message: 29/02/2008, 10h15
  3. [SQL] Fonction retournant le booléen false qui se transforme en true!
    Par fayred dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 13/09/2007, 12h37
  4. Nom qui se transforme tout seul en ID
    Par amalane dans le forum IHM
    Réponses: 5
    Dernier message: 10/09/2007, 07h22
  5. Réponses: 10
    Dernier message: 26/07/2007, 09h00

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