将行分组为列后为 gt 列着色

问题描述 投票:0回答:1

使用 gt 对其进行分组后,我在选择列时遇到问题。我制作了一些假数据来复制我想做的事情。

grade_level <- c("1st","1st","1st","1st", "2nd", "2nd", "2nd", "2nd", "3rd", "3rd", "3rd", "3rd",
           "4th","4th","4th","4th", "5th", "5th", "5th", "5th")
group <- c("District level girls", "District level boys", "State level girls", "State level boys",
           "District level girls", "District level boys", "State level girls", "State level boys",
           "District level girls", "District level boys", "State level girls", "State level boys",
           "District level girls", "District level boys", "State level girls", "State level boys",
           "District level girls", "District level boys", "State level girls", "State level boys")
nmbr_A <- sample(1:30, 20)
nmbr_B <- sample(1:30, 20)
nmbr_C <- sample(1:30, 20)
table_data <- cbind(grade_level, group, nmbr_A, nmbr_B, nmbr_C)

gt(table_data,
   rowname_col = "group",
   groupname_col = "grade_level") %>% 
  tab_options(row_group.as_column = TRUE) %>% 
  data_color(columns = 2,
             method = "factor",
             palette = c("#347f7f",  "#63b5b5", "#a97298", "#6c395c"))

我想为包含州或地区级女孩或男孩的列着色,但分组后我不知道如何选择该列。它甚至不再有名称(我也不知道如何向其添加列名称)。

r gt
1个回答
0
投票

如果您使用

columns = everything()
,您会看到分组变量或
stub
没有着色。我相当确定您不能使用该函数来为存根列着色。

您可以使用

tab_style
为存根着色。

由于

tab_style
中只能指定一种颜色,因此需要使用4次。我使用
lapply
创建了四种颜色集。

我将你的颜色设置为一个独立的对象,这样我就可以在

lapply
中调用它们。

lapply
的每次迭代都相当于
group
中的唯一条目之一。

为了收集适用的行,我使用了

seq
,从lapply的当前迭代开始,
by
:唯一标签的数量(这里有4个),以及
length.out
中唯一条目的数量grade_level
—另一个分组变量(这里有 5 个)。

如果您有任何疑问,请告诉我。

library(gt)
library(tidyverse)

gtt <- gt(table_data,
   rowname_col = "group",
   groupname_col = "grade_level") %>% 
   tab_options(row_group.as_column = TRUE) # without data_color()

clr = c("#347f7f",  "#63b5b5", "#a97298", "#6c395c")  # color list from question

invisible(lapply(1:length(unique(group)), function(j) { # for each unique entry in group
  gtt <<- gtt %>%                                       # add each tab_style to table
    tab_style(style = cell_fill(color = clr[j]),        # seq through colors
              locations = cells_stub(
                rows = seq(from = j,                    # start from current iteration
                           by = length(unique(group)),  # by unique entries
                           length.out = length(unique(grade_level)))) # by grade level
              )
}))
gtt  # let's see what we've got

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.