У меня есть этот набор данных, и я пытаюсь раскрасить ячейки с одинаковыми значениями одним и тем же цветом после использования функции as_grouped_data(., groups = "").
dat <- data.frame(
stringsAsFactors = FALSE,
A = c("NHH","NHH","NHH","NHH",
"NHH","NHH","NHH","NHH","NHH","cUU","cUU","cUU",
"cUU","cUU","cUU","cUU","cUU","cUU","cUU","cUU","cUU",
"cUU","cUU","cUU","cUU","cUU","cUU","cUU"),
B = c("uJc","GBY","rYv","hYl",
"hat","hqL","jxF","hqL","VMg","gWX","Vae","uJc",
"GBY","Vae","hYl","uJc","pEI","gWX","ZCY","ZCY","Vae",
"Vae","rYQ","veT","hqL","Vae","hYl","QIN")
)%>% as_grouped_data(., groups = "A")
cid <- dplyr::consecutive_id(dat$B)
cols <- sample(colors(), size = length(unique(cid)))
mycolors <- cols[cid]
flextable(dat) |>
bg(i = 1:nrow(dat), j = 'B', bg = mycolors, part = 'body')
Я заметил, что сгенерированные цвета выбираются случайным образом, и поэтому есть такие цвета, как черный и подобные, которые слишком темны, чтобы раскрашивать ячейки. Можно ли как-то исправить эту проблему?





Без воспроизводимого примера помочь труднее. Я буду использовать только ваши данные и первый столбец для демонстрации:
dat <- data.frame(
stringsAsFactors = FALSE,
A = c("NHH","NHH","NHH","NHH",
"NHH","NHH","NHH","NHH","NHH","cUU","cUU","cUU",
"cUU","cUU","cUU","cUU","cUU","cUU","cUU","cUU","cUU",
"cUU","cUU","cUU","cUU","cUU","cUU","cUU"),
B = c("uJc","GBY","rYv","hYl",
"hat","hqL","jxF","hqL","VMg","gWX","Vae","uJc",
"GBY","Vae","hYl","uJc","pEI","gWX","ZCY","ZCY","Vae",
"Vae","rYQ","veT","hqL","Vae","hYl","QIN")
)
cid <- dplyr::consecutive_id(dat$A)
cols <- sample(colors(), size = length(unique(cid)))
mycolors <- cols[cid]
flextable(dat) |>
bg(bg = mycolors)
Чтобы ответить на ваш обновленный вопрос, вот код. Обратите внимание: вывод as_grouped_data() следует использовать с as_flextable(), а не с flextable(). Здесь есть один цвет, который выделяет повторяющиеся ячейки.
library(tidyverse)
library(flextable)
dat <- data.frame(
stringsAsFactors = FALSE,
A = c("NHH","NHH","NHH","NHH",
"NHH","NHH","NHH","NHH","NHH","cUU","cUU","cUU",
"cUU","cUU","cUU","cUU","cUU","cUU","cUU","cUU","cUU",
"cUU","cUU","cUU","cUU","cUU","cUU","cUU"),
B = c("uJc","GBY","rYv","hYl",
"hat","hqL","jxF","hqL","VMg","gWX","Vae","uJc",
"GBY","Vae","hYl","uJc","pEI","gWX","ZCY","ZCY","Vae",
"Vae","rYQ","veT","hqL","Vae","hYl","QIN")
) %>% as_grouped_data(., groups = "A")
z <- dat |>
mutate(
cid = case_when(
!is.na(B) ~ consecutive_id(B),
TRUE ~ NA
)
) |> add_count(cid)
as_flextable(dat) |>
bg(i = ~!is.na(B) & z$n > 1, j = 'B', bg = "yellow", part = 'body')
Привет. Есть небольшое изменение. На самом деле у меня есть только основная часть использования функции as_grouped().
Вы взяли ответ и использовали его, чтобы полностью изменить свой вопрос. Это удивительно
Привет, только позже понял, что на самом деле проблема, с которой я столкнулся, была связана с этим элементом гибкой таблицы. Но если вы с этим не согласны, не стесняйтесь голосовать против вопроса, удалять свой ответ или делать что-то еще, что вы хотите сделать.
Я бы не стал понижать голос... Это просто делает ответ абсурдным, поскольку не отвечает на новый вопрос.
Хорошо. На самом деле мне было бы интересно раскрасить второй столбец. Но принцип тот же, тогда попробую час кодр