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 :

[débutante] extraire et ne conserver que certaines données


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2011
    Messages : 84
    Par défaut [débutante] extraire et ne conserver que certaines données
    Bonjour,

    je dispose d'une série de données dont la première colonne est des dates au format "dd.mm.yyyy hh:mm" (pas de mesure), et les quinze colonnes suivantes sont des températures prises en quinze profondeurs différentes d'un forage au pas de temps indiqué par la première colonne.
    J'aimerais pouvoir déterminer à partir de quelle profondeur mes températures restent négatives en permanence (donc toute la colonne comportant des températures négatives). Je peine à trouver la fonction nécessaire à cette opération, le "if" ne semble pas adapté puisque le message d'erreur me dit qu'il teste seulement un élément de ma colonne au lieu de la colonne entière.
    Ensuite, j'aimerais ne conserver que cette colonne, ainsi que celle précédente.
    Quelqu'un pourrait-il m'indiquer dans quel sens prendre le problème? En vous remerciant.

    Florence

  2. #2
    Membre éclairé Avatar de habasque
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Septembre 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 530
    Par défaut
    Salut,

    Il nous faudrait plus de détails c'est-à-dire code + données.
    Si tu regardes l'aide sur la fonction subset, tu devrais avancer...
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    subset(airquality, Temp > 80, select = c(Ozone, Temp))
    Bon courage,

  3. #3
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2011
    Messages : 84
    Par défaut
    Et bien déjà merci habasque.

    Voici une partie de mon jeu de données (désolée je ne sais pas comment l'insérer de façon formelle en fait):

    Dates X0.30 X0.50 X0.70 X0.90 X1.10 X1.40 X1.70 X2.00
    1 2010-04-12 12:00:00 -7.91 -8.11 -8.17 -8.18 -8.23 -8.05 -7.96 -7.86
    2 2010-04-12 15:00:00 -7.56 -8.19 -8.45 -8.50 -8.56 -8.46 -8.35 -8.18
    3 2010-04-12 18:00:00 -7.62 -7.99 -8.33 -8.46 -8.55 -8.46 -8.34 -8.17
    4 2010-04-12 21:00:00 -8.13 -7.99 -8.25 -8.41 -8.52 -8.45 -8.33 -8.17
    5 2010-04-13 00:00:00 -9.11 -8.25 -8.25 -8.36 -8.50 -8.42 -8.33 -8.16
    6 2010-04-13 03:00:00 -10.08 -8.69 -8.37 -8.36 -8.47 -8.41 -8.33 -8.16
    7 2010-04-13 06:00:00 -10.77 -9.13 -8.56 -8.41 -8.47 -8.41 -8.32 -8.16
    8 2010-04-13 09:00:00 -10.32 -9.38 -8.77 -8.50 -8.49 -8.40 -8.31 -8.15
    et dont la str:

    'data.frame': 3039 obs. of 16 variables:
    $ Dates : POSIXlt, format: "2010-04-12 12:00:00" "2010-04-12 15:00:00" ...
    $ X0.30 : num -7.91 -7.56 -7.62 -8.13 -9.11 ...
    $ X0.50 : num -8.11 -8.19 -7.99 -7.99 -8.25 -8.69 -9.13 -9.38 -8.95 -8.27 ...
    $ X0.70 : num -8.17 -8.45 -8.33 -8.25 -8.25 -8.37 -8.56 -8.77 -8.82 -8.65 ...
    $ X0.90 : num -8.18 -8.5 -8.46 -8.41 -8.36 -8.36 -8.41 -8.5 -8.58 -8.59 ...
    $ X1.10 : num -8.23 -8.56 -8.55 -8.52 -8.5 -8.47 -8.47 -8.49 -8.52 -8.55 ...

    Je cherche a déterminer la dernière colonne (elles indiquent des profondeurs en m) où il y a des températures positives, et la première où les températures sont toutes négatives. Mon but final est d'interpoler la profondeur à laquelle le front de températures positives pénètre, mais bon, déjà arriver à conserver ces deux colonnes c'est une bonne première étape.

    Pour ce qui est du code, et bien j'ai du mal à le formuler, mais je vais essayer avec ce subset déjà.
    Merci, et si avec ça c'est plus clair pour m'orienter, je prends tous les conseils :-)


    Florence

  4. #4
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Par défaut
    Bonjour,

    Alors personnellement, votre deuxième message m'a plus embrouillée qu'autre chose et je ne suis pas sûre d'avoir bien compris ce que vous cherchez à faire...

    Citation Envoyé par Florence Magnin Voir le message
    mais bon, déjà arriver à conserver ces deux colonnes c'est une bonne première étape.
    Si votre jeu de données est stocké dans un data.frame appelé "mydata" par exemple (jeu de données appelé "toto.txt" dans mon exemple et avec comme séparateur de champ la tabulation), vous pouvez accéder à une colonne donnée soit par le numéro correspondant soit par son nom, comme ceci :

    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
    17
    18
    19
    mydata<-read.table("toto.txt",header=TRUE,sep="\t")
    mydata
                   Dates  X0.30 X0.50 X0.70 X0.90 X1.10 X1.40 X1.70 X2.00
    1 2010-04-12 12:00:00  -7.91 -8.11 -8.17 -8.18 -8.23 -8.05 -7.96 -7.86
    2 2010-04-12 15:00:00  -7.56 -8.19 -8.45 -8.50 -8.56 -8.46 -8.35 -8.18
    3 2010-04-12 18:00:00  -7.62 -7.99 -8.33 -8.46 -8.55 -8.46 -8.34 -8.17
    4 2010-04-12 21:00:00  -8.13 -7.99 -8.25 -8.41 -8.52 -8.45 -8.33 -8.17
    5 2010-04-13 00:00:00  -9.11 -8.25 -8.25 -8.36 -8.50 -8.42 -8.33 -8.16
    6 2010-04-13 03:00:00 -10.08 -8.69 -8.37 -8.36 -8.47 -8.41 -8.33 -8.16
    7 2010-04-13 06:00:00 -10.77 -9.13 -8.56 -8.41 -8.47 -8.41 -8.32 -8.16
    8 2010-04-13 09:00:00 -10.32 -9.38 -8.77 -8.50 -8.49 -8.40 -8.31 -8.15
     
     
    mydata[,2]
    [1]  -7.91  -7.56  -7.62  -8.13  -9.11 -10.08 -10.77 -10.32
     
     
    mydata$X0.30
    [1]  -7.91  -7.56  -7.62  -8.13  -9.11 -10.08 -10.77 -10.32
    Si cela vous pose des difficultés, je ne saurais que trop vous conseiller de commencer par lire certains tutoriels de base sur R, dont certains sont disponibles ici.

    Cela dit, n'hésitez pas à nous donner d'autres explications concernant votre problème actuel.
    Bonne continuation


    Cordialement,

    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

  5. #5
    Membre éclairé Avatar de habasque
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Septembre 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 530
    Par défaut
    Salut,

    Je t'avoue que la formulation de ton problème n'est pas très claire.

    Regardes du côté de la fonction which par exemple si tu veux trouver les indices de tes températures positives. Par exemple, sur la première colonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    which(tonJeuDeDonnees$X0.30 > 0)

  6. #6
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2011
    Messages : 84
    Par défaut
    Ok, je vais donc essayer de formuler plus clairement le problème.
    Ce que je cherche à faire est:

    1) trouver à partir de quelle date des températures positives sont enregistrée pour la première profondeur (X0.30), donc à partir de quand X0.30 > 0 et obtenir cette date (avec une fonction print? paste?.
    2) trouver la profondeur maximale (quelle colonne) à laquelle une température positive est enregistrée, et à quelle date celle-ci est enregistrée (quelle ligne).

    j'ai donc pensé quelque chose comme pour 1):

    df <- dataframe

    for (i in 2:nrow(df)) { # un moyen de lire ligne par ligne à partir dela
    # seconde?
    if (i > 0)
    { print(paste( .... # et là il faudrait que s'inscrive sur ma console la
    # date (ce qu'il y a dans la première colonne
    # de cette ligne). Mais peut - être faudrait-il utiliser
    # une fonction stop, ou alors, un "while" tant que i < 0
    # continuer à lire ligne par ligne et dès que i >0 "stop"?

    Bref, comme vous le voyez je suis vraiment novice et maitrise mal ces boucles et la formulation des fonctions. Donc si vous avez des pistes....
    Merci en tt cas pour l'attention accordée à ce petit problème.

    Florence

  7. #7
    Membre éclairé Avatar de habasque
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Septembre 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 530
    Par défaut
    D'une manière générale, évite les boucles. et il faudrait que tu lises la documentation R pour partir sur de bonnes bases.

    Pour trouver à partir de quand X0.30 > 0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    id_date_prof_pos <- which(df$X0.30 > 0)
    print(df$X0.30[min(id_date_prof_pos)])

Discussions similaires

  1. [XL-2007] Extraire que certaines données d'un fichier csv
    Par Fouinette85 dans le forum Macros et VBA Excel
    Réponses: 23
    Dernier message: 06/05/2009, 23h37
  2. Comment ne conserver que certains caratères ?
    Par pazgal dans le forum Langage
    Réponses: 2
    Dernier message: 10/03/2009, 00h45
  3. Besoin d'aide pour n'extraire que certaines données
    Par Jean-Marc68 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/02/2008, 17h53
  4. Réponses: 35
    Dernier message: 18/05/2006, 18h30
  5. Réponses: 1
    Dernier message: 06/02/2006, 13h53

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