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 :

Extraire des valeurs d'un fichier, help me !


Sujet :

R

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 11
    Points : 9
    Points
    9
    Par défaut Extraire des valeurs d'un fichier, help me !
    Bonjour tout le monde.

    Je viens de m'inscrire sur ce forum ! Je suis thésard en hydrologie à Toulouse, et j'ai décidé de me mettre à R pour traiter des données. Je suis encore bien novice, et je risque sans doute de poser des questions bêtes parfois... J'espère dans tous les cas que certains d'entre vous pourront répondre à mes interrogations.

    Ma question est donc la suivante :
    J'aimerais extraire des valeurs d'un fichier X constitué de 365 valeurs. Il faudrait dans un premier temps que je divise ce fichier en paquets de 5 pour obtenir un fichier de 73 paquets de 5.

    ------
    V1
    V2
    V3
    V4
    V5
    --------
    V6
    V7
    V8
    V9
    V10
    --------
    etc...

    Ensuite j'aimerais sélectionner la plus grande valeur de chaque paquet. Je voudrais donc obtenir au final un nouveau fichier Y constituée de 73 valeurs (étant les valeurs les plus élévées de chaque paquet).

    Comment formuler ça sous R... ?

    Merci d'avance pour votre aide !!

    Vincent

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Bonjour et bienvenu sur le forum.

    Quand vous dites que votre fichier X est constitué de 365 valeurs, ce sont bien 365 lignes et une seule colonne qui constituent ce fichier ?
    Peut-on voir un exemple de fichier à traiter ?
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Bonjour et merci d'avoir lu mon message !

    Ce sont bien 365 lignes oui, et une colonne.
    Sur R, le fichier se présente sous forme de deux colonnes : une qui représente le numéro de ligne (de 1 à 365), l'autre la valeur attribuée.

    Code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    > X=read.table("/home/vincent/modcou/pluies_obs")
    > attach(X)
    > X
    V1
    1 51.27
    2 45.34
    3 40.43
    4 36.49
    5 33.43
    6 31.13
    7 29.41
    etc...

    Pour obtenir une valeur max d'un paquet de 5, je pensais utiliser la fonction "max", mais ce que j'aimerais pouvoir faire c'est une boucle sur les 73 paquets de 5 en fait.





    Citation Envoyé par ced Voir le message
    Bonjour et bienvenu sur le forum.

    Quand vous dites que votre fichier X est constitué de 365 valeurs, ce sont bien 365 lignes et une seule colonne qui constituent ce fichier ?
    Peut-on voir un exemple de fichier à traiter ?

  4. #4
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Pas besoin de boucles pour tout ça...
    Personnellement, pour ce genre de choses, j'ai tendance à utiliser le package data.table.

    Voici comment je ferais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    X <- data.frame(V1=rnorm(365))
    X$gp <- as.integer((1:365-0.1)/5)
     
    library(data.table)
    X2 <- data.table(X, key="V1")
     
    X3 <- X2[, max(V1), by=gp]
    setkeyv(X3, "gp")
     
    X3
    Je crée un data frame de 365 valeurs aléatoires.
    Pour obtenir des groupes de 5 lignes, je rajoute une colonne à mon data frame dans laquelle je divise le numéro de la ligne (le - 0.1 permet que le premier groupe ait bien 5 lignes) par 5, pour numéroter mes groupes de 0 à 72.

    Ensuite, je transforme mon data frame en data.table (variable X2).
    Puis je sélectionne, dans ce data.table, le max de chaque groupe de 5 lignes, et je mets le tout dans une variable X3.
    En définissant ma colonne gp (groupe) comme clé de ce data.table, ça le trie automatiquement selon gp.
    Ne reste plus qu'à afficher X3 pour vérifier qu'il est correct, et le tour est joué.

    On peut faire aussi sans passer par data.table, mais ce package est super puissant pour ce genre de choses.
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  5. #5
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Au passage, si vraiment vous souhaitez récupérer un dataframe final avec une seule colonne, comme celui de départ, alors il n'y a qu'à faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    as.data.frame(X3)[, "V1", drop = FALSE]
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Je n'ai qu'une réponse à apporter ...

    Balaise !!!

    Votre technique marche très bien, je n'avais pas encore installé le package data.table, bonne chose de faite !

    ça fait franchement plaisir d'être accueilli de la sorte sur ce forum. Non seulement vous m'avez donné le code, mais en plus vous m'avez expliqué comment vous avez procédé, c'est vraiment sympa !!
    R est un outil que j'utilise souvent dans la thèse que je débute, et vous ne pouvez pas vous imaginer comme votre aide à cette question m'a été précieuse ! Il est je trouve parfois difficile de trouver de la documentation pour des questions spécifiques de la sorte, sachant en plus que l'informatique n'est pas mon fort. Enfin, j'espère progresser grâce à ce forum et à des gens comme vous.
    A très vite sur le forum donc !

    Bien amicalement,
    Vincent

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

Discussions similaires

  1. Extraire des valeurs d'un fichier
    Par jal13 dans le forum Fortran
    Réponses: 2
    Dernier message: 14/12/2010, 16h29
  2. Extraire des valeurs d'un fichier avec AWK
    Par Maillon dans le forum Linux
    Réponses: 2
    Dernier message: 05/02/2009, 22h49
  3. Extraire des valeurs d'un fichier txt
    Par boby35 dans le forum Octave
    Réponses: 5
    Dernier message: 16/04/2008, 12h05
  4. Réponses: 11
    Dernier message: 31/03/2008, 19h18
  5. Extraire des lignes d'un fichier en commande bash
    Par newnew dans le forum Linux
    Réponses: 3
    Dernier message: 27/07/2004, 16h22

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