Une question rapide liée à la multiplication des deux objets numériques. Voici à quoi ressemblent mes deux objets.
P1 P2 P(P1*P2) Low Low 0.0625 Medium Low 0.125 High Low 0.0625 Low Medium 0.125 Medium Medium 0.250 High Medium 0.125 Low High 0.0625 Medium High 0.125 High High 0.0625
Je veux avoir quelque chose comme ci-dessous.
P1 <- c(Low=.25,Medium=.50,High=.25) P2 <- c(Low=.25,Medium=.50,High=.25)
Des pensées à ce sujet?
Merci! p>
3 Réponses :
Le produit externe est calculé par outer
:
reshape2::melt(out, value.name = "P(P1*P2)") P1 P2 P(P1*P2) 1 Low Low 0.0625 2 Medium Low 0.1250 3 High Low 0.0625 4 Low Medium 0.1250 5 Medium Medium 0.2500 6 High Medium 0.1250 7 Low High 0.0625 8 Medium High 0.1250 9 High High 0.0625
Ensuite, vous pouvez le mettre sous forme longue en utilisant le package reshape2:
out <- outer(P1, P2) dimnames(out) <- setNames(dimnames(out), c("P1", "P2")) P2 P1 Low Medium High Low 0.0625 0.125 0.0625 Medium 0.1250 0.250 0.1250 High 0.0625 0.125 0.0625
J'utiliserais la syntaxe tidyverse
avec expand.grid
:
library(tidyverse) P1 <- tribble( ~level, ~value1, "Low", 0.25, "Medium", 0.5, "High", 0.25 ) P2 <- tribble( ~level, ~value2, "Low", 0.25, "Medium", 0.5, "High", 0.25 ) expand.grid(p1_lev = P1$level, p2_lev = P2$level) %>% left_join(P1, by = c("p1_lev" = "level")) %>% left_join(P2, by = c("p2_lev" = "level")) %>% mutate(new_value = value1*value2) %>% select(-value1, -value2)
Un autre, un peu similaire à ci-dessus:
library(tidyverse) expand.grid(names(P1), names(P2)) %>% mutate(Var3 = P1[Var1] * P2[Var2]) %>% rename(Var1 = "P1", Var2 = "P2", Var3 = "P(P1 * P2)") P1 P2 P(P1 * P2) 1 Low Low 0.0625 2 Medium Low 0.1250 3 High Low 0.0625 4 Low Medium 0.1250 5 Medium Medium 0.2500 6 High Medium 0.1250 7 Low High 0.0625 8 Medium High 0.1250 9 High High 0.0625
Comme ça?
cbind (P1, P2, P3 = P1 * P2)
ou simplementmelt
.Cela ne calcule pas réellement toutes les combinaisons. Seules trois valeurs ont été évoquées.
reshape2 :: melt (extérieur (P1, P2))
?Cela fonctionne très bien! Merci! :)