【问题标题】:Using gt opt_footnote_marks get confusing result使用 gt opt_footnote_marks 得到令人困惑的结果
【发布时间】:2021-11-05 18:12:40
【问题描述】:

我想使用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 & p.value < 0.1)) %>%         
  tab_footnote(
    data      = .,
    footnote  = "b",
    locations = cells_body(
      columns = var1,
      rows    = p.value >= 0.01 & 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.value

在我通过调整脚注的顺序尝试了@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 & 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 & 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 

result.2 所示,var1.p.value result.3 如此处所示,p.value

【问题讨论】:

    标签: r html-table gt footnotes


    【解决方案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 & p.value < 0.1)) %>%         
      tab_footnote(
        data      = .,
        footnote  = "c",
        locations = cells_body(
          columns = var1,
          rows    = p.value >= 0.01 & 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("*", "**", "***")) 
    

    【讨论】:

    • 感谢您的回答。有效!但是在我使用循环将脚注添加到几列后出现了同样的问题。我编辑了我的问题来说明这个问题。
    • 我想我可能已经想通了。正如您所建议的,脚注的顺序显示为它们首先出现在一个列中。但是,当存在多于一列时,脚注的顺序显示为它们首先出现在每一列的行中。也就是说,该函数首先检查 table[1,1],然后检查 table[1,2],然后检查 table[1,3]。这就解释了为什么当我在循环中增加列时脚注的顺序会发生变化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多