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 :

Enregistrer une valeur dans une cellule


Sujet :

R

  1. #1
    Membre du Club
    Homme Profil pro
    touristepationné
    Inscrit en
    Janvier 2012
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : touristepationné
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 132
    Points : 57
    Points
    57
    Par défaut Enregistrer une valeur dans une cellule
    Bonjour,

    J'aimerai enregistrer le contenu d'une variable (valeur ou vecteur ou chaine de caractères) dans une cellule d'une matrice se trouvant dans un fichier .csv.
    Il s'agit de désigner la colonne du tableau où enregistrer la valeur, mais sans connaitre à l'avance la ligne. Le but étant d'écrire dans la 1ère ligne vide de la colonne désignée.

    Exemple un tableau a 2 colonnes A et B
    la ligne 1 colonne A est occupée par 24
    la ligne 1 colonne B est occupée par 654
    Je souhaite enregistrer le contenu "987" de ma variable nommée "x" dans la première cellule libre de la colonne A.

    Je suis débutant et incapable de rédiger ce code seul en moins d'une a deux semainex....

    Merci pour votre aide.

  2. #2
    Membre habitué
    Homme Profil pro
    Analyste
    Inscrit en
    Février 2012
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste

    Informations forums :
    Inscription : Février 2012
    Messages : 62
    Points : 143
    Points
    143
    Par défaut
    Bonjour,

    Oh, il ne faut pas être si modeste
    As-tu déjà quelques notions de programmation ?

    Pour ton problème sache que :
    - tu peux tester la valeur d'une cellule avec par exemple is.na()
    - tu peux grâce à la fonction which() connaitre toutes les cellules qui remplissent une condition
    - la fonction min() te renvoie la plus petite valeur d'un vecteur
    - length() te renverra sa taille
    - enfin, si ton tableau a n lignes et que tu insères une valeur dans la n+1ème ligne de n'importe quelle colonne, les autres cellules de cette ligne auront pour valeur NA

    Pour plus d'infos sur ces fonctions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ?is.na()
    ?which()
    ?min()
    ?length()
    Bon courage, et bon week-end.

  3. #3
    Membre du Club
    Homme Profil pro
    touristepationné
    Inscrit en
    Janvier 2012
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : touristepationné
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 132
    Points : 57
    Points
    57
    Par défaut
    J'ai des notions de programmation, mais je suis perdu en R. Je découvre ce langage qui possède vraiment beaucoup de fonctions déjà existantes, et c'est dur de s'y retrouver. En plus je ne suis pas non plus très brillant en anglais...

    Voici néanmoins ce que j'ai pu faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #Ouvrir le fichier
    tableau <- read.table("test.csv", sep=",",header=TRUE, fill=FALSE)
    tableau
    #variable à enregistrer dans la 1ère cellule vide de la colonne choisie
    #Position de la nouvelle ligne
    NL<-length(tableau[,"Col1"])+1
    #Création d'une ligne supplémentaire
    tableau<-rbind(tableau,NL)
    tableau
    #Création d'un variable pour l'exemple
    a<-"BlaBla"
    #Rangement de la variable
    tableau[NL,"Col1"]<-a
    Et voici le résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Message d'avis :
    In `[<-.factor`(`*tmp*`, iseq, value = "BlaBla") :
      invalid factor level, NAs generated
    Avec en prime la nouvelle ligne remplit de <NA>.

    Tu saurais expédier le contenu de la varible "a" dans la case indiquée?

  4. #4
    Membre habitué
    Homme Profil pro
    Analyste
    Inscrit en
    Février 2012
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste

    Informations forums :
    Inscription : Février 2012
    Messages : 62
    Points : 143
    Points
    143
    Par défaut
    Bonsoir,

    Que quelqu'un m'arrête si je dis une co**erie :

    D'après le message d'erreur, c'est le fait que tu essaies d'insérer "blabla" dans ton tableau qui pose problème. La colonne de ton tableau est un factor qui, si je ne me trompe pas, n'accepte qu'un seul type de données. C'est-à-dire que si ton factor contient des valeurs numériques tu ne peux pas insérer une chaîne de caractères.
    Si tu es sûr de ne jamais insérer de texte dans ta colonne, et que c'était juste pour l'exemple, tu t'es heurté à un problème que tu n'aurais jamais dû avoir Cocasse comme situation quand même.

    Tu peux peut-être essayer as.vector avant d'insérer ta variable, je pense que ça devrait suffire, mais n'ayant pas d'exemple pour reproduire le code, je ne peux pas te le garantir.

    Sinon! Petite astuce (et l'un des charmes de R), dans ton code tu crées une nouvelle ligne que tu vas ensuite insérer dans ton tableau. Dans beaucoup de langages effectivement c'est nécessaire, mais pas dans R.
    Si tu lui spécifies juste :
    - le numéro de la ligne (même si elle n'existe pas encore, tant que c'est la n+1ème)
    - la colonne (idem, tu peux même appeler la nouvelle colonne par le nom que tu veux lui donner, si R ne trouve pas de colonne avec ce nom dans le tableau, il la crée et l'ajoute en fin de tableau)
    - et la valeur que tu veux insérer
    Il le fait et se charge des finitions en rajoutant des NA sur le reste de la ligne. Tu peux créer un objet à la volée.

    Bon j'arrête, en plus je viens de me rendre compte que j'ai déjà dit ça dans ma première réponse, je radote, je radote, je r...

    J'espère que ça fonctionnera, n'hésite pas à revenir sinon (avec un exemple reproductible si possible?). En espérant t'avoir éclairé.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 125
    Points : 339
    Points
    339
    Par défaut
    Hello,

    Voici un code qui -- je pense -- reproduit votre problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    aa <- as.factor(c("val1","val1","val2","val2","val2","val3","val3","val3"))
    print(aa)
    aa[length(aa)+1] <- "val3"
    print(aa)
    aa[length(aa)+1] <- "val4"
    print(aa)
    Si je l'exécute voici le résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    > aa <- as.factor(c("val1","val1","val2","val2","val2","val3","val3","val3"))
    > print(aa)
    [1] val1 val1 val2 val2 val2 val3 val3 val3
    Levels: val1 val2 val3
    > aa[length(aa)+1] <- "val3"
    > print(aa)
    [1] val1 val1 val2 val2 val2 val3 val3 val3 val3
    Levels: val1 val2 val3
    > aa[length(aa)+1] <- "val4"
    Message d'avis :
    In `[<-.factor`(`*tmp*`, length(aa) + 1, value = "val4") :
      invalid factor level, NAs generated
    > print(aa)
     [1] val1 val1 val2 val2 val2 val3 val3 val3 val3 <NA>
    Levels: val1 val2 val3
    >
    Dans ce code, aa est une variable de type facteur avec 3 niveaux val1, val2 et val3. Lorsque j'ajoute val3 dans aa via le code aa[length(aa)+1] <- "val3", pas de problème car val3 est déjà un des niveaux du facteur. Mais lorsque j'ajoute val4, il y a une erreur.

    Il y a plusieurs possibilités pour résoudre ce problème, voici un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    aa <- as.factor(c("val1","val1","val2","val2","val2","val3","val3","val3"))
    print(aa)
    levels(aa) <- c("val1","val2","val3","val4")
    print(aa)
    aa[length(aa)+1] <- "val4"
    print(aa)
    qui donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    > aa <- as.factor(c("val1","val1","val2","val2","val2","val3","val3","val3"))
    > print(aa)
    [1] val1 val1 val2 val2 val2 val3 val3 val3
    Levels: val1 val2 val3
    > levels(aa) <- c("val1","val2","val3","val4")
    > print(aa)
    [1] val1 val1 val2 val2 val2 val3 val3 val3
    Levels: val1 val2 val3 val4
    > aa[length(aa)+1] <- "val4"
    > print(aa)
    [1] val1 val1 val2 val2 val2 val3 val3 val3 val4
    Levels: val1 val2 val3 val4
    >
    Bonne continuation,
    A++

  6. #6
    Membre du Club
    Homme Profil pro
    touristepationné
    Inscrit en
    Janvier 2012
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : touristepationné
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 132
    Points : 57
    Points
    57
    Par défaut
    Super !
    Merci a tout les deux, ça marche!
    Si Guine, je voulais bien insérer du texte, c'était volontaire. J'avais aussi remarqué les "facilités" que permet R mais je préfère pour l'instant rester propre dans l'ordre des instructions, pour ne pas m'y retrouver plus facilement. Tu as quand même bien fait de me prévenir, ça me permet de me rendre compte du fonctionnement des autres utilisateurs de R.

    Hoccha, merci, tu es tombé juste !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/03/2014, 12h05
  2. Réponses: 2
    Dernier message: 24/02/2009, 17h40
  3. quand je selectionne une valeur dans une liste, retourne une autre valeur
    Par nsqualli dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/12/2008, 14h23
  4. Réponses: 1
    Dernier message: 25/09/2006, 17h15
  5. Mettre une valeur d'une table dans une variable
    Par Raphou96 dans le forum Access
    Réponses: 5
    Dernier message: 06/02/2006, 15h19

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