如何在同一个扳手下格式化多列? / gt() 如何分配列位置?

How do you format multiple columns under the same spanner? / How does gt() assign column location?

我有一个带有一系列扳手的 gt table。每个扳手下方都有两列。我想对其进行格式化,以便突出显示所有其他扳手下的列。第 1 列具有存根值。在下面的代码中,第 2 列是 Spanner 1 下第一列的位置。我希望第 3 列突出显示紧挨着 2 的列,但它会跳过该列并突出显示第二个 Spanner 的第一列(我会调用第 4 列)。

my_data %>%
 gt() %>%
 tab_spanner_delim(delim = "_") %>%    
 tab_style(
       style = list(cell_fill(color = "#f2dddc")),
       locations = cells_body(columns = c(2,3)) # 6,7,10,11, etc. for every other spanner
           )

那么如何设置我的代码格式以引用 spanner/how 下的两列?我是否可以引用扳手下不是第一列的任何列?有没有办法将扳手作为位置参考?

并且为了它的价值,我在 Shiny 中做这件事,所以一旦我理解了 gt() 的机制,我将需要进一步修改代码以使其动态化。

谢谢!

更新:我在引用扳手时遇到了类似的问题。下面的代码成功地添加了一个左边框,从扳手开始,运行 在第 2 列和第 3 列的底部(因此第一个扳手及其 2 列被包裹在外边框中)。

%>%
        tab_style(
          style = list(cell_borders(
            sides = "left",
            color = "black",
            weight = px(3)
          )),
          locations = list(cells_column_labels(columns = c(2,3)), #left side of column two and 3 (remember col 3 is the first column of spanner 2)
                           cells_body(columns = c(2,3)), #Repeat of above but with the column values
                           cells_column_spanners(spanners = c(1,2)) #Left sides of spanners 1 and 2 (left side of spanner 2 = left side of col 3)
        )) #Results are as expected

现在,我想强调第一个扳手的名字。鉴于上面的代码块,引用扳手 1 对我来说很有意义。当我引用扳手 1 时,第二个扳手会突出显示。知道为什么吗?我不明白为什么我可以通过引用“1”来获得扳手 1 左侧的边框,但是当我使用相同的扳手引用来突出显示单元格时,它会突出显示扳手 2。然后我尝试引用扳手 0,但它抛出了索引不存在的错误。

%>%
     tab_style(
      style = list(
         cell_fill(color = "#f2dddc")),
       locations = list(cells_column_spanners(
         spanners = 1)) #Why does this line highlight spanner 2?
              ) 

我开始意识到(我的)困惑在于制表符分隔符。我使用 pivot_wider 为 gt() 准备我的数据,导致 df 格式如下: (1) Group1_varA, (2) Group2_varA, (3) Group3_varA, (4) Group1_varB, (5) Group2_varB, (6) Group2_varB.

tab_spanner_delimiter 重新排列列,使 varA 和 VarB 在各自的组下,但列索引不变,使上例中的列顺序为 1,4,2,5,3 ,6.