Operación aritmética utilizando una declaración condicional.
Necesito escribir una función para dividir una columna por un elemento de una matriz si se cumplen dos condiciones. Estas dos condiciones también cambian el elemento de la matriz.
foo <-c(‘A’, ‘B’, ‘C’, ‘D’, ‘F’, ‘G’)
phi <-c(‘Z1’, ‘Z1’, ‘X3’, ‘W4’, ‘V5’, ‘W4’)
tal <-c(‘1-2’, ‘3-4’, ‘5-6’, ‘7-8’, ‘9-10′, ’11-12’)
n <-c(324, 872, 163, 953, 453, 943)
df <-data.frame(foo, phi, tal, n)
mtx <-c(5983, 4079, 4253, 3516, 3452, 2519, 10079, 3083, 1998, 3115, 3545, 327790, 6847, 2583, 2193, 2221, 3557, 5031, 866, 3685, 3452, 2519, 10079, 3083, 1998)
mtx <-matrix(mtx, 6, 6, dimnames=list(c(‘Z1’, ‘Y2’, ‘X3’, ‘W4’, ‘V5’, ‘U6’), c(‘1-2’, ‘3-4’, ‘5-6’, ‘7-8’, ‘9-10′, ’11-12’)))
Necesito escribir algo como esto:
df$P <- ifelse(df$phi==”Z1″ & df$tal == “1-2″, df$n/mtx[1,1],
df$phi==”Z1” & df$tal == “3-4″, df$n/mtx[1,2],
df$phi==”Y2” & df$tal == “1-2”, df$n/mtx[2,1])
Sé que la función ifelse por sí sola no es suficiente para obtener lo que necesito. ¿Alguien sería capaz de encontrar una solución? Muchas gracias.
davy.ai
Se podría utilizar un bucle
for
para iterar a través del conjunto de datos y dividir la columnan
por el elemento correspondiente en la matrizmtx
si se cumplen las dos condiciones.R
for (i in 1:nrow(df)) {
if (df$phi[i] == "Z1" & df$tal[i] == "1-2") {
df$P[i] <- df$n[i]/mtx[1,1] } else if (df$phi[i] == "Z1" & df$tal[i] == "3-4") { df$P[i] <- df$n[i]/mtx[1,2] } else if (df$phi[i] == "Y2" & df$tal[i] == "1-2") { df$P[i] <- df$n[i]/mtx[2,1] } }