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.

Paquete R Formattable: formato condicional del contenido de las celdas en base a un umbral numérico.

Tengo un dataframe como el siguiente:

mydata <- structure(list(Wife = c(15.972, 12.715, 8.333, 6.276, 2.179, -1.408, -1.649, -4.647, -7.039, -5.299, -7.411, -9.776, -9.612), Alternating = c(-2.622, -0.548, -1.331, 3.9, -1.802, 2.08, 1.481, 9.53, 7.709, -0.953, -4.823, -4.878, -5.245), Husband = c(-7.012, -5.823, -3.99, -3.324, -5.828, -4.869, -3.941, 0.515, 9.551, -0.868, 4.843, 24.544, -5.812), Jointly = c(-8.283, -7.569, -4.048, -6.564, 4.418, 4.284, 4.157, -3.006, -7.306, 7.066, 7.086, -8.306, 19.397)), row.names = c("Laundry", "Main_meal", "Dinner", "Breakfeast", "Tidying", "Dishes", "Shopping", "Official", "Driving", "Finances", "Insurance", "Repairs", "Holidays"), class = "data.frame")

que lista los residuos estandarizados ajustados de chi-cuadrado. Usando el paquete ‘formattable’ de R, logré obtener la siguiente tabla (más formateada que en la consola de R):

Tabla formateada

Problema

No he podido encontrar una opción viable para aplicar un formato condicional a algunas celdas según el tamaño del residual. Lo que busco es (por ejemplo) tener en VERDE las celdas cuyo residual sea mayor que +1.96, y en ROJO aquellas cuyo residual sea menor que -1.96.
De hecho, consulté la vignette del paquete sin éxito.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Posible solución:

    Puede utilizar la función color_tile() del paquete formattable para crear una casilla codificada por colores para cada celda, según el valor del residuo. Puede definir una escala de colores con colorScale() que asigna valores a colores, y aplicarlo a cada celda utilizando la función formatter().

    Aquí hay un ejemplo de código que colorea las celdas en verde o rojo, según el valor del residuo:

    library(formattable)
    
    # definir escala de colores
    escala_color <- colorScale(
      c(min(mis_datos), -1.96, 1.96, max(mis_datos)),
      c("rojo", "blanco", "verde")
    )
    
    # crear función formateadora
    formateador <- function(x) {
      color_tile("blanco", escala_color(x))
    }
    
    # aplicar formateador a cada celda
    formattable(mis_datos, list(
      Esposa = formateador,
      Alternativo = formateador,
      Esposo = formateador,
      Conjunto = formateador
    ))
    

    Esto debería resultar en una tabla donde las celdas con un residuo menor a -1.96 están coloreadas en rojo, aquellas entre -1.96 y 1.96 en blanco, y aquellas mayores a 1.96 en verde. Puede ajustar la escala de colores y los valores para adaptarlos a sus necesidades específicas.

Comments are closed.