#r #gt
Вопрос:
Для фиктивных данных выполните следующие действия:
df <- structure(list(id = 1:4, v1 = c("/", "0.2", "0.3", "0.4"), v2 = c(0.8,
0.2, 0.1, 0.5), change = c("/", "0", "-0.2", "0.1")), class = "data.frame", row.names = c(NA,
-4L))
С помощью приведенного ниже кода я могу легко раскрасить v2
gt
пакет из R, так как его тип данных numeric
:
library(tidyverse)
library(gt)
df %>%
gt() %>%
data_color(
columns = "v2",
colors = scales::col_numeric(
palette = paletteer::paletteer_d(
palette = "ggsci::red_material"
) %>% as.character(),
domain = NULL
)
)
Из:
Теперь я v1
также хотел бы раскрасить (пожалуйста, обратите внимание, что тип dtype этого столбца char
) и отобразить NA
с /
помощью (так как выходная цифра будет использоваться в отчете, поэтому я хочу
или -
как символ для представления NA
или NaN
вместо использования символа NA по умолчанию R).
Итак, мой вопрос в том, возможно ли это сделать? Если да, то как? Спасибо за вашу помощь заранее.
Редактировать:
library(tidyverse)
library(gt)
library(paletteer)
na_palette <- paletteer::paletteer_d(palette = "ggsci::red_material")
na_palette[1] <- "#FFFFFFFF" # replace "/" with white
df %>%
gt() %>%
data_color(
columns = "v2",
colors = scales::col_numeric(
palette = paletteer::paletteer_d(
palette = "ggsci::red_material"
) %>% as.character(),
domain = NULL
)
) %>%
data_color(
columns = "v1",
colors = scales::col_factor(
na.color = "white",
palette = na_palette %>% as.character(),#use the palette
domain = NULL
)
)%>%
data_color(
columns = "change",
colors = scales::col_factor(
na.color = "white",
palette = na_palette %>% as.character(),#use the palette
domain = NULL
)
)
Из:
Ответ №1:
вы можете добавить еще gt::data_color
один вызов в свой канал:
df %>%
gt() %>%
data_color(
columns = "v2",
colors = scales::col_numeric(
palette = paletteer::paletteer_d(
palette = "ggsci::red_material"
) %>% as.character(),
domain = NULL
)
)%>%
data_color(
columns = "v1",
colors = scales::col_factor(
palette = paletteer::paletteer_d(
palette = "ggsci::red_material"
) %>% as.character(),
domain = NULL
)
)
в этом случае вам просто нужно изменить scales::col_numeric
scales::col_factor
значение, которое задает цвета для значений вашего персонажа
изменить: если вы хотите установить значение /
белый:
na_palette <- paletteer::paletteer_d(palette = "ggsci::red_material") # get the palette
na_palette[1] <- "#FFFFFFFF" # replace "/" with white
df %>%
dplyr::mutate(
change = factor(change, levels = change),
v1 = factor(v1, levels = v1)
) %>%
gt() %>%
data_color(
columns = "v2",
colors = scales::col_numeric(
palette = paletteer::paletteer_d(
palette = "ggsci::red_material"
) %>% as.character(),
domain = NULL
)
) %>%
data_color(
columns = c("v1", "change"),
colors = scales::col_factor(
palette = na_palette %>% as.character(),#use the palette
domain = NULL
)
)
Из:
Комментарии:
1. Извините, цвет представляет значения, если он больше или меньше, поэтому я обновил код, пожалуйста, проверьте с обновленным
palette
.2. все еще должен работать с
scales::col_factor
for v1, я обновил ответ3. Извините, я ошибся. Кстати, можно ли не устанавливать цвет для ячейки
/
, так как она представляетNA
s?4. я адаптировал свой ответ, вы также можете подумать об
n = NROW(df)
paletteer::paletteer_d
этом , поэтому каждое значение также получает цвет5. Я изменил свой ответ: если вы измените тип данных столбцов на коэффициент с правильными уровнями, это сработает, проблема заключалась в том, что раньше
col_factor
устанавливались неправильные уровни