Bonjour,

J'essaye actuellement d'affecter une valeur à un data frame (df1) grâce aux valeurs d'un autre data frame(df2).
Dans df1 j'ai deux variables AE et BR qui prennent les valeurs AE1 à AE139 et BR1 à BR139. Je teste pour chaque ligne de df1 si les numéro de AE et BR sont égaux. Si c'est le cas j'affecte à la variable VAL de df1 la somme de quatre valeurs que je vais prélever dans df2. Néanmoins, j'aimerais que cette valeur dépendant des variables de la ligne de df1 sur laquelle je fais le test.
Avec une boucle for j'y arrive sans problème mais les data frames sur lesquelles je travaille sont trop grosses et les temps de calcul trop long. C'est pourquoi j'ai opté pour la fonction ifelse(). Cependant, j'aimerais qu’à chaque itération de la boucle ifelse les valeurs que je prélève dans df2 dépendent des modalités de la ligne de df1 actuellement testé par la fonction ifelse. Avec mon code actuel ci-dessous ce n'est pas ce qui se passe. Avez-vous une idée pour résoudre le problème ?
J'espère avoir été assez clair dans l'explication de mon problème.
Merci par avance
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 
BR139 <- str_c("BR", 1:139, sep ="")
AE139 <- str_c("AE", 1:139, sep ="")
 
df2 <- data.frame(CC = rep(c("CC1","CC2", "CC3"), each = 139*139*2),
                      SI = rep(c("SI1","SI2"), each = 139*139),
                      BR = rep(BR139 ,  139),
                      AE = rep(AE139 ,each = 139),
                      TA = rep(c("TA1","TA2"), each = 139*139*2*3),
                      VAL = sample(c(NA, 1:10), 139*139*2*3, replace = T, prob = c(1/3, rep(1/15,10)))
)
 
df1 <- filter(df2,
              CC == "CC1",
              SI %in% c("SI1", "SI2"),
              BR %in% BR139,
              AE %in% AE139,
              TA == "TA1")
 
df2 <- drop_na(df2, VAL)
 
df1$VAL2 <- 0
 
df1$VAL2 <- ifelse (str_sub(df1$AE, start = 3, end = 5) == str_sub(df1$BR, start = 3, end = 5),
                                  rowSums(cbind(df2[df2$AE %in% df1$AE &
                                                          df2$BR %in% df1$BR &
                                                          df2$SI %in% df1$SI&
                                                          df2$CC == "CC1"&
                                                          df2$TA == "TA1", "VAL"],
                                                df2[df2$AE %in% df1$AE &
                                                          df2$BR == "BR87" &
                                                          df2$SI %in% df1$SI&
                                                          df2$CC == "CC1"&
                                                          df2$TA == "TA1", "VAL"],
                                                df2[df2$AE %in% df1$AE &
                                                          df2$BR == "BR88" &
                                                          df2$SI %in% df1$SI&
                                                          df2$CC == "CC1"&
                                                          df2$TA == "TA1", "VAL"],
                                                df2[df2$AE %in% df1$AE &
                                                          df2$BR == "BR94" &
                                                          df2$SI %in% df1$SI&
                                                          df2$CC == "CC1"&
                                                          df2$TA == "TA1", "VAL"], na.rm = T)),
                                  df2[df2$AE %in% df1$AE &
                                            df2$BR %in% df1$BR &
                                            df2$SI %in% df1$SI&
                                            df2$CC == "CC1"&
                                            df2$TA == "TA1", "VAL"])