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 :

Réaliser subset [Débutant(e)]


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 43
    Par défaut Réaliser subset
    Bonjour à tous,

    Toujours moi et mes problèmes je reviens en force

    Aujourd'hui le problème du jour est: filtrer des vaches.

    Je cherche à filtrer les données des veaux nés de la première gestation d'une vache.
    Pour cela, je dispose du numéro du veau, du numéro de la vache et de sa date de naissance.

    J'ai imaginé qu'il aurait fallu faire une fonction "subset". Sauf que comment on utilise un subset avec des dates ? (En sachant qu'il faudra du coup prendre le veau qui a la date de naissance la plus "ancienne").

    Parce que si une vache a eu 5 veaux (par exemple) comment je fais pour ne garder que son premier veau ? Et donc faire ça pour chaque vache ? En sachant que je ne peux pas donner une année (du genre tous les veaux nés en 2010) parce qu'il peut y avoir des premiers veaux dans n'importe quelle année entre 2010 et 2015.

    Merci d'avance

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Janvier 2012
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2012
    Messages : 325
    Par défaut
    Il existe des classes pour gérer les dates, utilise les fonction as.Date ou as.POSIXct (si tu as des heures/minutes/secondes).
    Exemple : as.Date("01/12/13",format="%d/%m/%y")

    Ensuite pour trouver le premier veau, il y a plusieurs façon de faire.
    Avec la fonction by par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    df=data.frame(mere=rep(letters[1:3],3),date=runif(9)) # Création d'un jeu de données bidon, avec un nombre aléatoire à la place des dates mais ça reviens au même
    df
    Reduce(rbind,by(df,df$mere,function(veaux){cbind(veaux,ordre=order(veaux$date))}))

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 43
    Par défaut
    La fonction met énormément de temps à se faire (ça fait 2h qu'elle est lancée...) c'est normal ?

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Janvier 2012
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2012
    Messages : 325
    Par défaut
    Tes données font quelle taille?
    Les fonctions by (ou aggregate) ne sont pas très adaptées aux gros jeux de données (> 100 000 lignes).
    Mais il existe des packages qui permettent d'indexer les colonnes des dataframes et améliorent considérablement les performances.

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 43
    Par défaut
    Ah oui moi j'ai environ 200 000 données

    Des infos sur ce package ? A moins que je laisse mon ordi allumé une semaine ?

  6. #6
    Membre chevronné
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Janvier 2012
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2012
    Messages : 325
    Par défaut
    Avec le package data.table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    library(data.table)
    df=data.table(mere=rep(1:100000,3),date=runif(300000))
    df2=df[,list(date,ordre=rank(date)),by=mere]
    C'est équivalent au code posté précédement, sauf que pour 300000 lignes ça ne prend que quelques secondes.

    À noter que je m'étais trompé dans mon message précédent, il faut utiliser la fonction rank et non order (je les confond toujours).

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

Discussions similaires

  1. msi ou comment réaliser un installeur?
    Par herzleid dans le forum Delphi
    Réponses: 11
    Dernier message: 09/04/2007, 19h27
  2. Réaliser un Chat avec support IP
    Par Sub0 dans le forum Développement
    Réponses: 12
    Dernier message: 14/07/2006, 10h59
  3. Comment réaliser des modèles de documentations avec XML ?
    Par Dams76 dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 29/08/2003, 02h15
  4. [Radio fréquence] réalisation d'une application
    Par WriteLN dans le forum Développement
    Réponses: 14
    Dernier message: 05/06/2003, 14h36
  5. [imprecis]Réaliser a^n avec seulement l'opérateur d'addition
    Par Amon dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 08/11/2002, 22h22

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