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.

En gt: Seleccionar celdas para darles formato basado en las posiciones relativas de las celdas y columnas, no en un nombre de columna literal.

En el siguiente ejemplo, la tabla 1 es un ejemplo funcional que especifica el nombre de la columna directamente en la especificación de la fila. Esto me da el resultado que quiero, pero no quiero llamar directamente a los nombres de las columnas. En su lugar, quiero referirme a ellos indirectamente (debido a que usaré este código en muchas tablas con las mismas dimensiones pero con diferentes nombres). La tabla 2 intenta hacer esto, pero no funciona. ¿Existe una forma adecuada de lograr mi objetivo?

df <- data.frame(colA = c(5, 10), colB = c(8, 9))
table1 <- df %>%
  gt() %>%
  tab_style(style = cell_text(color = "red"),
            locations = cells_body(columns = colB,
                                   rows = colB > 8))
table1

table2 <- df %>%
  gt() %>%
  tab_style(style = cell_text(color = "red"),
            locations = cells_body(columns = ends_with("B"),
                                   rows = last_col() > 8))
table2
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, existe una forma adecuada de referirse a los nombres de columna indirectamente en el paquete gt. En lugar de usar la función ends_with(), se puede usar la función matches() para hacer coincidir los nombres de columna usando expresiones regulares. Aquí hay una versión actualizada de table2 que logra el resultado deseado:

    table2 <- df %>%
      gt() %>%
      tab_style(
        style = cell_text(color = "red"),
        locations = cells_body(
          columns = matches("B$"),
          rows = last_col() > 8
        )
      )
    table2
    

    En este código, matches("B$") hace coincidir cualquier columna que termine con “B”. $ es un caracter de expresión regular que hace coincidir el final de una cadena. Por lo tanto, "B$" hace coincidir cualquier cadena que termine con “B”.

Comments are closed.