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 :

Création de colonne dans fichier data


Sujet :

R

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 9
    Points : 9
    Points
    9
    Par défaut Création de colonne dans fichier data
    Bonjour j'aurais besoin de votre aide pour ajouter une colonne lieu dans un fichier de données.
    J'ai 3 colonne "L","puce" et "heure" dans mon fichier data, je cherche à créer une nouvelle colonne "lieu" remplie à l'aide de l'information de "L" par soit la lettre A soit la lettre B. Chaque numéro de "L" correspond soit à "A" soit à "B"

    Mon script DE BASE (ma source) est comme suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    # les Lecteurs (colonne L) 1 à 5, corresponde à A et de 6 à 10, à B
    data$lieu<-NA
    data$lieu[(data$L>0)&(data$L<6)]<-"A"
    data$lieu[(data$L>5)&(data$L<11)]<-"B"
    Le script que j'ai tenté de créer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    data$lieu<-NA
    data$lieu[(data$L==44341)&(data$L==44357)&(data$L==44353)&(data$L==44343)&(data$L==37157)&(data$L==26865)&(data$L==44361)&(data$L==26147)&(data$L==37155)&(data$L==24529)&(data$L==44349)&(data$L==44359)]<-"A" 
    data$lieu[(data==44344)&(data$L==44340)&(data$L==44342)&(data$L==44360)&(data$L==44340)&(data$L==26862)&(data$L==26864)&(data$L==31668)&(data$L==24530)&(data$L==44352)&(data$L==44350)&(data$L==44356)&(data$L==44346)&(data$L==44348)&(data$L==44340)&(data$L==26146)&(data$L==44358)]<-"B"
    Pouvez vous me dire comment l'arranger mieux que cela pour que celui ci marche enfin (j'ai essayé avec des "" ou sans avec des &) ?

    Voici mon message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    > View(data)
    Error in View : cannot coerce class ""function"" to a data.frame
    > data$lieu<-NA
    Error in data$lieu <- NA : object of type 'closure' is not subsettable
    > data$lieu[data$L=="44341"]="A"
    Error in `*tmp*`$lieu : object of type 'closure' is not subsettable
    > data$lieu[data$L=="44344"]="B"
    Error in `*tmp*`$lieu : object of type 'closure' is not subsettable
    > #data$lieu[ data$L==44341 & data$L==44357]="A"
    Je vous remercie d'avance pour votre aide,
    bien cordialement.

  2. #2
    Membre expert
    Avatar de pitipoisson
    Homme Profil pro
    Chercheur
    Inscrit en
    Septembre 2006
    Messages
    1 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 942
    Points : 3 378
    Points
    3 378
    Par défaut
    Bonjour et bienvenue,

    Citation Envoyé par pjulie Voir le message
    Voici mon message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    > View(data)
    Error in View : cannot coerce class ""function"" to a data.frame
    > data$lieu<-NA
    Error in data$lieu <- NA : object of type 'closure' is not subsettable
    > data$lieu[data$L=="44341"]="A"
    Error in `*tmp*`$lieu : object of type 'closure' is not subsettable
    > data$lieu[data$L=="44344"]="B"
    Error in `*tmp*`$lieu : object of type 'closure' is not subsettable
    > #data$lieu[ data$L==44341 & data$L==44357]="A"
    Pour commencer, data est une fonction de base de R (d'où les différents message d'erreur)... à éviter donc pour un nom d'objet.

    Citation Envoyé par pjulie Voir le message
    Le script que j'ai tenté de créer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    data$lieu<-NA
    data$lieu[(data$L==44341)&(data$L==44357)&(data$L==44353)&(data$L==44343)&(data$L==37157)&(data$L==26865)&(data$L==44361)&(data$L==26147)&(data$L==37155)&(data$L==24529)&(data$L==44349)&(data$L==44359)]<-"A" 
    data$lieu[(data==44344)&(data$L==44340)&(data$L==44342)&(data$L==44360)&(data$L==44340)&(data$L==26862)&(data$L==26864)&(data$L==31668)&(data$L==24530)&(data$L==44352)&(data$L==44350)&(data$L==44356)&(data$L==44346)&(data$L==44348)&(data$L==44340)&(data$L==26146)&(data$L==44358)]<-"B"
    Plusieurs remarques :
    1. je suppose que l'opérateur pour les conditions devrait être le "ou" (|) et non le "et" (&)... à moins que data$L soit complètement schizophrène !
    2. il est largement préférable d'utiliser la fonction is.element() ou %in% que cette formulation en d’innombrables conditions.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    > ?is.element
    > help("%in%")
    Forum LaTeX : pour des réponses rapides et appropriées, pensez à poster un
    ECM = Exemple (reproduit le problème) Complet (document compilable) Minimal (ne postez pas votre thèse !)

    Une solution vous convient ? N'oubliez pas le tag


    )><))))°>

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    Merci pour vos conseils avisés et rapides, je me méfierais à l'avenir du "data", je l'ai renommé. Et je pense que c'était le problème, j'ai aussi changé le type de fichier pour du csv (j’étais en txt).
    Quant à la formule pour remplir mon champ, j'ai utilisé une feinte qui consiste à mettre chaque [numéro] ="A" et des points virgules entre. Mais ce n'est évidement pas le top (surtout que la ça va j'ai que 40 N.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data$lieu[data$L==44341]="A";.....
    Dans votre formule, il aurai fallu que je la remplisse comme suivant ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    is.element(44341 %in% data_set$L;"A"|45342 %in% data_set$L;"B"|....etc)
    Pour dire de chercher le numéro dans la colonne L de mon jeu de donnée, et de lui attribuer la valeur "A" si c'est vrai et sinon (le OU) chercher un autre numéro de lecteur ...etc.

    Enfin je ne suis pas vraiment sure de la justesse de ma formule, néanmoins je vous remercie pour toutes vos informations qui me permettent de découvrir d'autres possibilités sous R. Bien cordialement.

  4. #4
    Membre expert
    Avatar de pitipoisson
    Homme Profil pro
    Chercheur
    Inscrit en
    Septembre 2006
    Messages
    1 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 942
    Points : 3 378
    Points
    3 378
    Par défaut
    Bonjour,

    Je doute que cette dernière commande puisse fonctionner... ou bien si c'est le cas, elle serait de toute manière bien trop compliquée.

    is.element() test l'appartenance de chaque élément de son premier argument (un vecteur) à l'ensemble d'éléments défini dans son second argument (un vecteur également) et permet donc de sélectionner d'un tenant toutes les lignes qui remplissent la condition (attention j'ai remplacé "data" par "Data") :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Data$lieu[is.element(Data$L,                       # le vecteur dont on test l'appartenance de chaque élément...
                         c(44341, 44357, 44353,...))   # ...à cet ensemble.
                                           # Le tout permettant d'indicer les lignes qui remplissent la condition...
              ] <- "A"                     # ...et d'y assigner ce que tu souhaites
     
    ## Écriture plus compacte :
    Data[is.element(Data$L, c(44341, 44357, 44353,...)),
         "lieu"] <- "A"
    %in% est juste une autre façon un peu plus intuitive d'écrire le test sur l'ensemble :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Data$L %in% c(44341, 44357, 44353,...)
    Forum LaTeX : pour des réponses rapides et appropriées, pensez à poster un
    ECM = Exemple (reproduit le problème) Complet (document compilable) Minimal (ne postez pas votre thèse !)

    Une solution vous convient ? N'oubliez pas le tag


    )><))))°>

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

Discussions similaires

  1. Suppression de colonnes dans un data.frame
    Par ricoben dans le forum R
    Réponses: 1
    Dernier message: 13/04/2010, 17h13
  2. Mean par colonne dans une data frame
    Par manoir dans le forum R
    Réponses: 3
    Dernier message: 19/06/2009, 11h06
  3. Création et écrirture dans fichier EXCEL
    Par Rifton007 dans le forum VB.NET
    Réponses: 3
    Dernier message: 18/05/2009, 16h47
  4. ajout colonne dans fichier directement
    Par Strami dans le forum Langage SQL
    Réponses: 2
    Dernier message: 15/02/2009, 10h09
  5. Réponses: 2
    Dernier message: 14/11/2008, 14h53

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