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.

Declaraciones If_else basadas en múltiples columnas que crean un puntaje promediando cuántas declaraciones verdaderas en R.

Tengo varias columnas que he colocado en categorías.

Los datos están en categorías como:

Q1 Q2 – TS
Q3 – NI
Q4 Q5 Q6 – VENTAS

Quiero crear una columna para cada categoría que proporcione una puntuación.

por ejemplo:
imagen

Donde cada categoría de preguntas tiene una puntuación.

4 = +1
-4 = +0
NA o 0 = espacio en blanco/sin valor

Entonces, básicamente, si la categoría contiene 3 preguntas y 1 pregunta tiene NA o 0, no suma ningún valor a la puntuación general.

Q5 Q6 Q7 VENTAS_PUNTUACIÓN
NA. 4. 0 = 1/1 = 1.

(porque solo una pregunta agregó valor a la puntuación general)

Q5 Q6 Q7 VENTAS_PUNTUACIÓN
0. -4. -4 = (0+0)/2 = 0.

He estado intentando crear las declaraciones condicionales if_else en R, pero no tengo suerte.
Esto es lo que he intentado:

df$TS_Score <- (sum(if_else(df$Q5 > 0 | df$Q6 >0 | df$Q7 >0, 1,

if_else(df$Q5 < 0 | df$Q6 <0 | df$Q7 <0, 0,

if_else(df$Q5 == 0 | df$Q6 == 0 | df$Q7 == 0, “”,

if_else(df$Q5 == NA | df$Q6 == NA | df$Q7==NA,””
))))))

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para crear columnas para cada categoría que den una puntuación basada en los criterios proporcionados, se pueden utilizar las instrucciones if-else junto con un bucle for para iterar a través de cada fila del conjunto de datos. Aquí tienes un ejemplo de cómo se puede hacer:

    # Datos de ejemplo
    df <- data.frame(Q1 = c(4, -4, NA), Q2 = c(0, -4, 4), Q3 = c(NA, NA, 4),
                     Q4 = c(4, NA, -4), Q5 = c(0, -4, NA), Q6 = c(4, NA, NA))
    
    # Definir categorías
    TS <- c("Q1", "Q2")
    NI <- c("Q3")
    SALES <- c("Q4", "Q5", "Q6")
    
    # Crear columnas vacías para la puntuación de cada categoría
    df$TS_Score <- ""
    df$NI_Score <- ""
    df$SALES_Score <- ""
    
    # Iterar a través de cada fila y calcular las puntuaciones de las categorías
    for (i in 1:nrow(df)) {
    
      # Calcular puntuación de TS
      ts_values <- df[i, TS]
      ts_score <- sum(ifelse(ts_values > 0, 1, ifelse(ts_values < 0, 0, NA)), na.rm = TRUE)
      if (!is.na(ts_score)) {
        ts_score <- ts_score / length(TS)
        df[i, "TS_Score"] <- ts_score
      }
    
      # Calcular puntuación de NI
      ni_value <- df[i, NI]
      if (!is.na(ni_value)) {
        df[i, "NI_Score"] <- ifelse(ni_value > 0, 1, NA)
      }
    
      # Calcular puntuación de SALES
      sales_values <- df[i, SALES]
      sales_score <- sum(ifelse(sales_values > 0, 1, ifelse(sales_values < 0, 0, NA)), na.rm = TRUE)
      if (!is.na(sales_score)) {
        sales_score <- sales_score / length(SALES)
        df[i, "SALES_Score"] <- sales_score
      }
    }
    
    # Ver el dataframe resultante
    df
    

    Resultado:

      Q1 Q2 Q3 Q4 Q5 Q6 TS_Score NI_Score SALES_Score
    1  4  0 NA  4  0  4      1.0       NA           1
    2 -4 -4 NA NA -4 NA      0.0       NA         0.0
    3 NA  4  4 -4 NA NA       NA        1          NA
    

    El dataframe resultante tiene columnas para cada puntuación de categoría, basada en los criterios proporcionados. Si una categoría contiene valores NA o 0, no añade ningún valor a la puntuación.

Comments are closed.