1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    juillet 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : juillet 2017
    Messages : 4
    Points : 5
    Points
    5

    Par défaut Ma valeur est elle comprise dans l'intervalle x/y

    Bonjour à tous,

    Débutante en R, je rencontre un problème auquel je ne trouve pas de réponse..

    Mon problème est le suivant :

    J'ai un data frame avec 3336 observations et 10 variables (voir ci-dessous). J'ai ordonné mon data_frame selon le n° de l'animal et aussi le jour à l'aide de la ligne de code suivante (en passant j'ai viré les cases où il n'y avait pas de valeur (NA)) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FIO <- FIO[complete.cases(FIO$animal_number), ]
    FIO1  <- FIO [order(FIO[,1],decreasing=FALSE),]
    Nom : Untitled2.png
Affichages : 44
Taille : 54,1 Ko
    Je souhaitais obtenir un poids moyen par animal et par jour, j'ai donc fait une aggrégation avec l'instruction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mean_weight <- aggregate(weight ~day_visit_time+animal_number, data = FIO1, mean)
    J'ai également calculé les variables x et y : x correspond à mean-2sd et y correspond à mean+2sd.
    J'ai ainsi obtenu le data.frame suivant : Nom : Untitled3.png
Affichages : 45
Taille : 47,0 Ko

    Ce nouveau dataframe agregé ne contient plus que 300 lignes contre 3338 pour le premier, les merger ou appliquer la fonction cbind() est donc impossible.

    Je souhaiterais savoir si mon observation z (observation n°i, jour i, animal i) est comprise dans l'intervalle y/y de son groupe (c'est à dire même jour, même n°animal).
    Pour cela, je vais utiliser la fonction ifelse tel que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ifelse (weight <=x & weight>=y, weight, NA)
    Petite particularité :
    Le nombre d'observations par jour et par animal n'est pas fixé (cela peut être 10 comme cela peut être 3)

    J'ai regardé au niveau des fonctions for et while (correspondance entre n°animal et jour) cela n'aboutit pas à grand chose..

    N'hésitez pas à me poser des questions si vous avez des idées, des remarques, si je n'ai pas été clair etc..
    Bonne journée,
    Cordialement,
    Tiphaine

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    novembre 2011
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2011
    Messages : 52
    Points : 51
    Points
    51

    Par défaut

    Bonjour,

    regarder du côté de la fonction merge. Un exemple avec deux colonnes pour faire la jointure : https://stackoverflow.com/questions/...on-two-columns

    Bonne journée

  3. #3
    Membre confirmé
    Inscrit en
    novembre 2009
    Messages
    305
    Détails du profil
    Informations forums :
    Inscription : novembre 2009
    Messages : 305
    Points : 597
    Points
    597

    Par défaut

    Bonjour,

    Citation Envoyé par tiftif29 Voir le message
    J'ai ordonné mon data_frame selon le n° de l'animal et aussi le jour à l'aide de la ligne de code suivante :
    FIO1 <- FIO [order(FIO[,1],decreasing=FALSE),]
    Ici vous ne triez que sur la première variable, c'est-à-dire le numéro de l'animal, pas sur le jour.

    Ce nouveau dataframe agregé ne contient plus que 300 lignes contre 3338 pour le premier, les merger ou appliquer la fonction cbind() est donc impossible.
    Je ne comprends pas votre remarque :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    > df1 <- data.frame(id=c(1,1,1,2,2,2))
    > df1
      id
    1  1
    2  1
    3  1
    4  2
    5  2
    6  2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    > df2 <- data.frame(id=c(1,2),poids=c(38,42))
    > df2
      id poids
    1  1    38
    2  2    42
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    > df <- merge(df1,df2,by="id")
    > df
      id poids
    1  1    38
    2  1    38
    3  1    38
    4  2    42
    5  2    42
    6  2    42
    J'ai regardé au niveau des fonctions for et while (correspondance entre n°animal et jour) cela n'aboutit pas à grand chose..
    Vous pouvez regarder cette discussion pour résoudre le problème avec une boucle.

    Cordialement,

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    juillet 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : juillet 2017
    Messages : 4
    Points : 5
    Points
    5

    Par défaut

    Bonjour ,

    Merci beaucoup pour vos réponses. J'ai trouvé la solution grâce à vous !

    J'ai trouvé cette solution dans la fonction merge! j'avais oublié de mettre entre guillemets l'argument by. Merci vraiment, ça m'a bien aidé, problème résolu donc !


    A très vite,
    Cordialement,
    Tiphaine

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

Discussions similaires

  1. Vérifier si une date est comprise dans un intervalle de temps
    Par lordeikichi dans le forum Fonctions
    Réponses: 3
    Dernier message: 21/05/2017, 01h52
  2. Savoir si date est comprise dans un intervalle
    Par xillibit dans le forum PHP & MySQL
    Réponses: 5
    Dernier message: 05/12/2012, 13h55
  3. Réponses: 9
    Dernier message: 09/10/2012, 22h46
  4. La valeur n'est pas comprise dans la plage attendue.
    Par Sophie64 dans le forum SharePoint
    Réponses: 1
    Dernier message: 03/05/2010, 17h52
  5. Verifier qu'une valeur est comprise dans un intervalle
    Par wizo_nac dans le forum Prolog
    Réponses: 7
    Dernier message: 23/06/2009, 19h36

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