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))
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
contarget = 'cell'
para aplicar la función a cada celda individual en la tabla. Aquí hay un ejemplo de cómo hacer esto con elexample_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 simplementedetermine_cell_color
enstyleEqual
para aplicar la función a cada valor en la tabla.