es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Se podría utilizar un bucle for para iterar a través del conjunto de datos y dividir la columna n por el elemento correspondiente en la matriz mtx 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] } }

Comments are closed.