-
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!
-
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:
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.
-
Bonjour,
Merci de votre aide!!