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.

Cómo aplicar estilos a las celdas en DT:datatable basándose en la coincidencia de patrones de cadenas.

Tengo una aplicación brillante que muestra una tabla DT con valores numéricos formateados. La tabla contiene datos que son tanto porcentajes como datos que representan moneda. Los datos no están ordenados, ya que la tabla está efectivamente transpuesta, donde cada fila representa una caracterítica y cada columna es una observación. En última instancia, mi objetivo es codificar una lógica en la cual cualquier celda que tenga un valor negativo (el primer carácter de la cadena es un ‘-‘) se coloree de rojo. Aquí está mi ejemplo reproducible:

library(tidyverse)
library(DT)

example_df <- data.frame(
  x = c("$1", "-2%", "$3"),
  y = c("$10", "10%", "$20")
)

determine_cell_color <- function(x) {

if (str_sub(x, 1, 1) == "-") {
    return("red")
  }

else {
    return("white")
  }

}

# cómo hacer que una celda individual tenga un color diferente

# si el primer carácter en el valor de la cadena es '-'

example_df %>% 
  datatable() %>% 
  formatStyle(target = 'row', backgroundColor = styleEqual(~determine_cell_color))
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para colorear las celdas en una tabla DT en función de un valor negativo en la celda, primero puede definir una función determine_cell_color que tome el valor de la celda y devuelva "red" si el primer carácter de la cadena es "-" o "white" en caso contrario.

    A continuación, puede usar la función formatStyle con target = 'cell' para aplicar la función a cada celda individual en la tabla. Aquí hay un ejemplo de cómo hacer esto con el example_df:

    “`{r}
    library(tidyverse)
    library(DT)

    example_df <- data.frame(
    x = c(“$1”, “-2%”, “$3”),
    y = c(“$10”, “10%”, “$20”)
    )

    determine_cell_color <- function(x) {
    if (str_sub(x, 1, 1) == “-“) {
    return(“red”)
    } else {
    return(“white”)
    }
    }

    example_df %>%
    datatable() %>%
    formatStyle(
    columns = names(example_df),
    target = “cell”,
    backgroundColor = styleEqual(lapply(value, determine_cell_color))
    )
    “`

    Esto coloreará cualquier celda con un valor negativo en rojo y dejará el resto de las celdas con un fondo blanco. Note que usamos lapply(value, determine_cell_color) en lugar de simplemente determine_cell_color en styleEqual para aplicar la función a cada valor en la tabla.

Comments are closed.