Использование gt opt_footnote_marks приводит к запутанному результату

#r #html-table #gt #footnotes

Вопрос:

Я хотел бы использовать opt_footnote_marks для обозначения столбца в соответствии с другим столбцом следующее:

 # packages
library("gt")
library("data.table")

# generate sample data.table
DT <- data.table(var1 = c(1:7),
                 p.value = c(0.7142599356, 0.0516123439, 0.0004532802, 0.1129728328, 0.3334458362, 0.3849460248, 0.0241492332))

# use gt to generate a gt_tib object
gt.table <- gt(data = DT) 

# label var1 according to p.value
gt.table <- 
  tab_footnote(
    data      = gt.table,       
    footnote  = "a",      
    locations = cells_body(
      columns = var1, 
      rows    = p.value >= 0.05 amp; p.value < 0.1)) %>%         
  tab_footnote(
    data      = .,
    footnote  = "b",
    locations = cells_body(
      columns = var1,
      rows    = p.value >= 0.01 amp; p.value < 0.05)) %>%
  tab_footnote(
    data      = .,
    footnote  = "c",
    locations = cells_body(
      columns = var1,
      rows    = p.value < 0.01)) %>%
  opt_footnote_marks(
    data      = .,
    marks     = c("*", "**", "***")) 

# print table as html
gt.table
 

Однако результат был очень впечатляющим.
Как показано на рисунке: во-первых, порядок сноски «a», «b» и «c» был неправильным. Во-вторых, строка со значением p. На картинке у него было только **. Спасибо!

результат.1

После того, как я попробовал решение @Matt, изменив порядок сноски (я добавил комментарий в строке, где была сделана корректировка),

 # generate test data.table
DT <- data.table(var1 = c(1:7),
                 var1.p.value = c(0.7142599356, 0.0516123439, 0.0004532802, 0.1129728328, 0.3334458362, 0.3849460248, 0.0241492332),
                 var2 = c(8:14),
                 var2.p.value = c(0.0696197928, 0.0440874454, 0.1603414690, 0.0007604622, 0.2863551953, 0.1418785028, 0.3724698668))

# change data.table to gt_tib object 
gt.table <- gt(data = DT) 

# add footnote by looping
for(x in c("var1")){
  
  gt.table <- 
  tab_footnote(
    data      = gt.table,       
    footnote  = "a",      
    locations = cells_body(
      columns = x, 
      rows    = DT[[paste0(x, ".p.value")]] >= 0.05 amp; DT[[paste0(x, ".p.value")]] < 0.1)) %>%         
  tab_footnote(
    data      = .,
    footnote  = "b",
    locations = cells_body(
      columns = x,
      rows    = DT[[paste0(x, ".p.value")]] >= 0.01 amp; DT[[paste0(x, ".p.value")]] < 0.05)) %>%
  tab_footnote(
    data      = .,
    footnote  = "c",
    locations = cells_body(
      columns = x,
      rows    = DT[[paste0(x, ".p.value")]] < 0.01)) %>%
  opt_footnote_marks(
    data      = .,
    marks     = c("*", "***", "**")) # change mark order according to the present of the wanted row in the column.  
}
gt.table 
 

Как показано на рис.2, var1 со значением var1.p. < 0,01 были помечены***, а var1 со значением 0,01 <= var1.p.
Но когда я попытался выполнить ту же работу с двумя столбцами, корреляция между метками и значением p.снова изменилась.
результат.3 Как показано здесь, var1 или var2 со значением p < 0,01 были помечены ** и 0,01 <= значение p Еще раз спасибо!

Ответ №1:

Порядок сносок отображается в том виде, в каком они впервые появляются в вашей колонке. Сначала a во 2-м ряду, затем c в 3- b м ряду и в 7-м ряду.

Если вы переключите свои ярлыки, они будут отображаться так, как вы задумали:

 gt.table <- 
  tab_footnote(
    data      = gt.table,       
    footnote  = "a",      
    locations = cells_body(
      columns = var1, 
      rows    = p.value >= 0.05 amp; p.value < 0.1)) %>%         
  tab_footnote(
    data      = .,
    footnote  = "c",
    locations = cells_body(
      columns = var1,
      rows    = p.value >= 0.01 amp; p.value < 0.05)) %>%
  tab_footnote(
    data      = .,
    footnote  = "b",
    locations = cells_body(
      columns = var1,
      rows    = p.value < 0.01)) %>%
  opt_footnote_marks(
    data      = .,
    marks     = c("*", "**", "***")) 
 

Комментарии:

1. Спасибо вам за ответ. Это сработало! Но та же проблема возникла после того, как я использовал цикл для добавления сноски к нескольким столбцам. Я отредактировал свой вопрос, чтобы проиллюстрировать эту проблему.

2. Мне кажется, я мог бы это понять. Как вы и предлагали, порядок сносок отображается так, как они сначала присутствуют в одной колонке. Однако, когда имеется более одного столбца, порядок сносок отображается так, как они сначала присутствуют в строке по всем столбцам. То есть функция сначала проверяет таблицу[1,1], затем таблицу[1,2], затем таблицу[1,3]. Это объясняло, почему порядок сносок изменился, когда я увеличил столбцы в цикле.