Je cherche à automatiser des calculs excels avec R.
Petit problème je n'ai que peu d'idée de comment faire...
Je dois calculer une moyenne corrigée.
J'ai donc séparé mon data frame en 2 : un dataframe avec les données à corrigé, et un autre avec la correction à appliquer. J'ai créer une nouvelle colonne remplis de 0 afin d'y rentrer les futurs moyennes corrigées.
Voici des extraits des deux datasframes :
Moyenne corrigée (dtamoy_filter) :
Hour Fluor Target Sample Cq.1 Cq.2 Cq.3 Sd Moyenne Moyenne_corrigée
1 32h SYBR FASN Am 1 24.12 24.45 23.93 0.26312228 24.16667 0
2 32h SYBR FASN Am 2,5 25.95 25.84 25.55 0.20663978 25.78000 0
3 32h SYBR FASN DMSO 0,1% 25.79 25.28 25.40 0.26664583 25.49000 0
4 32h SYBR FASN EtOH 1% 24.69 24.62 24.62 0.04041452 24.64333 0
5 32h SYBR FASN EtOH 2% 24.86 25.13 24.85 0.15885003 24.94667 0
6 32h SYBR FASN iOc 24.62 24.79 24.75 0.08888194 24.72000 0
7 32h SYBR FASN Val 10 25.18 25.28 24.89 0.20256686 25.11667 0
8 32h SYBR FASN Val 100 24.69 24.76 24.65 0.05567764 24.70000 0
9 32h SYBR FASN Val 50 25.54 25.85 25.76 0.15947832 25.71667 0
10 32h SYBR SCD1 Am 1 27.50 27.83 27.37 0.23713569 27.56667 0
11 32h SYBR SCD1 Am 2,5 30.21 29.44 29.68 0.39399662 29.77667 0
12 32h SYBR SCD1 DMSO 0,1% 30.36 29.44 30.16 0.48387326 29.98667 0
13 32h SYBR SCD1 EtOH 1% 28.31 28.73 28.38 0.22501852 28.47333 0
14 32h SYBR SCD1 EtOH 2% 28.40 28.36 28.49 0.06658328 28.41667 0
15 32h SYBR SCD1 iOc 29.12 29.20 28.87 0.17214335 29.06333 0
16 32h SYBR SCD1 Val 10 29.27 29.19 29.27 0.04618802 29.24333 0
17 32h SYBR SCD1 Val 100 28.88 28.80 28.73 0.07505553 28.80333 0
18 32h SYBR SCD1 Val 50 29.37 29.27 29.48 0.10503968 29.37333 0
19 32h SYBR TFa Am 1 21.10 21.13 21.34 0.13076697 21.19000 0
20 32h SYBR TFa Am 2,5 22.79 22.47 22.64 0.16010413 22.63333 0
Moyenne correction (dtahkali) :
Hour Sample 1 2 3 MoyenneHk
1 32h Am 1 20.77333 19.87667 17.94333 19.53111
2 32h Am 2,5 22.05000 21.19333 19.20000 20.81444
3 32h DMSO 0,1% 20.94333 19.57333 18.68000 19.73222
4 32h EtOH 1% 21.36333 18.30333 18.52000 19.39556
5 32h EtOH 2% 21.64000 19.12333 18.64000 19.80111
6 32h iOc 20.90000 19.25000 18.22333 19.45778
7 32h Val 10 21.34333 19.42667 19.26667 20.01222
8 32h Val 100 21.39500 19.51000 18.40333 19.76944
9 32h Val 50 22.40667 20.43000 19.20333 20.68000
10 48h Am 1 21.46333 18.82333 19.12333 19.80333
11 48h DMSO 0,01% 20.04667 18.65667 18.22000 18.97444
Le calcul est le suivant : Je dois pour un sample et une heure donnée corriger la moyenne
ex : à 32h et pour Am1, la moyenne à corrigée est de 24, 16667, la moyennehk est de 19,53111, la moyenne corrigée sera donc 24,16667 - 19,53111 = 4,63556
J'ai créer le code suivant afin d'y parvenir mais il ne fonctionne pas :
Code : Tout sélectionner
l = length(dtamoy_filter$Hour)
p = length(dtahkali$Hour)
Moyenne_corrigée = rep(0,l)
dtamoy_filter = data.frame(dtamoy_filter, Moyenne_corrigée)
while (i < l){
while (j <= p){
if (dtamoy_filter$Sample[i] == dtahkali$Sample[j]){
dtamoy_filter$Moyenne_corrigée[i] = dtamoy_filter$Moyenne[i] - dtahkali$MoyenneHk[j]
i = i+1
j = j+1
}
while (i != l){
if (j=p){
j = 1
}
}
}
}
Le message d'erreur suivant s'affiche :
Erreur : '=' inattendu(e) in:
" while (i != l){
if (j="
Auriez vous une solution ? Est-ce que je me complique la vie en séparant mon dataframe en 2 ? Y a t-il des fonctions qui permettent de faire des calculs "comme" sur Excel sans passer par des boucles ? Une case moins une autre, répétez l'opération, ...