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 :

Problème boucle et if en R


Sujet :

R

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    février 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : février 2021
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Problème boucle et if en R
    Bonjour, c'est mon premier message sur ce forum et j'ai besoin d'aide en R s'il vous plaît

    J'ai une table qui contient les colonnes : chr, start, end , chr1, start1, end1, methylation (sachant que mon chr, start end est différent de mon chr1, start1, end1)
    voici ce que j'obtiens quand je load ma table sur R :

    chr start end chr1 start1 end1 methylation
    1 chr1 49426837 49426839 chr1 49426837 50035747 68.4211
    2 chr1 49427012 49427014 chr1 49426837 50035747 84.6154
    3 chr1 49427299 49427301 chr1 49426837 50035747 71.1111
    4 chr1 49427473 49427475 chr1 49426837 50035747 100.0000
    5 chr1 49427490 49427492 chr1 49426837 50035747 91.6667
    6 chr1 49427513 49427515 chr1 49426837 50035747 100.0000
    7 chr1 49427590 49427592 chr1 49426837 50035747 88.8889
    8 chr1 152193401 152193403 chr1 152187753 152582710 7.14286
    9 chr1 152193602 152193604 chr1 152187753 152582710 76.92310
    10 chr1 152193677 152193679 chr1 152187753 152582710 34.61540
    11 chr1 152193759 152193761 chr1 152187753 152582710 90.62500
    12 chr1 152193952 152193954 chr1 152187753 152582710 71.42860
    13 chr1 152193981 152193983 chr1 152187753 152582710 22.72730
    14 chr1 152194953 152194955 chr1 152187753 152582710 80.95240
    15 chr1 152195161 152195163 chr1 152187753 152582710 66.66670
    16 chr1 152195615 152195617 chr1 152187753 152582710 100.00000
    17 chr1 152195619 152195621 chr1 152187753 152582710 100.00000
    18 chr1 152195627 152195629 chr1 152187753 152582710 75.00000
    19 chr1 152195681 152195683 chr1 152187753 152582710 70.00000
    20 chr1 152195728 152195730 chr1 152187753 152582710 86.66670
    21 chr1 152195760 152195762 chr1 152187753 152582710 89.47370

    C'est une très longue table de 186117 lignes.

    Mon but est de calculer la moyenne de la methylation et la standard deviation de la methylation pour chaque chr1 start1 end1 puis d'obtenir une autre table avec chr1, start 1, end1, moyenne methylation, standard deviation.

    J'ai quelque idées mais je ne suis pas sur de comment le coder en R
    Pour cela il faudrait faire une boucle i qui contient les ligne de chr1 start1 end1 et tant que mon i est le même alors faire la somme de la methylation puis diviser par le nombre de ligne et calculer la standard deviation.
    Si mon i est différent de la prochaine ligne alors on recommence ma ligne prend la valeur i et on retourne dans la boucle.

    J'ai voulu utiliser la fonction apply mais le problème est que je veux le faire sur mon i qui ne prend pas toute les valeurs.

    Merci d'avance pour votre aide!

  2. #2
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    avril 2008
    Messages
    1 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : avril 2008
    Messages : 1 972
    Points : 4 327
    Points
    4 327
    Par défaut
    Bonjour.
    Pas besoin de boucle ou de apply dans ce cas, la fonction aggregate va permettre de calculer facilement les statistiques.
    Si on suppose que ton data.frame s'appelle df, il faut quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    moyennes <- aggregate(methylation ~ chr1 + start1 + end1, df, mean)
    pour calculer les moyennes par combinaison de chr1, start1 et end1. Le résultat est un data.frame.
    De la même manière tu peux créer un second data.frame contenant les écarts-types avec la fonction sd en 3e argument d'aggregate.
    Enfin tu combines les deux résultats avec la fonction merge, en indiquant dans by le triplet de variables chr1, start1, end1, et l'option suffixes=c("_moy", "_sd") pour distinguer tes statistiques dans le résultat.
    Bon courage.
    Olivier

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    février 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : février 2021
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Merci de votre aide!!

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

Discussions similaires

  1. Problème Boucle Do-While?!
    Par Julien_C++ dans le forum C++
    Réponses: 6
    Dernier message: 29/07/2006, 12h23
  2. [Débutant] Problème boucle for
    Par toniooooo dans le forum Langage
    Réponses: 10
    Dernier message: 18/04/2006, 14h42
  3. [XSL] problème boucle
    Par VolaiL dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 10/04/2006, 16h55
  4. Problème boucle while et evenement
    Par tse_tilky_moje_imja dans le forum Général Python
    Réponses: 2
    Dernier message: 30/03/2006, 18h11
  5. [FLASH 8] Problème Boucle For
    Par Begood dans le forum Flash
    Réponses: 6
    Dernier message: 21/03/2006, 11h36

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