R gt表中多列的条件格式

R gt表中多列的条件格式,r,gt,R,Gt,这是我的第一篇帖子,如果我把事情搞砸了,我向你道歉。我试图将条件格式应用于gt表的多个列(比较SampA、SampB和SampB的结果以限制)。在其中一个和另一个的引导下,我使用以下代码成功地将其应用于单个列(变量): ## Conditional Formatting of single column in gt table samples = as_tibble(cbind("Chem"=c("Cd","Pb","Zn"), "Limit"=c

这是我的第一篇帖子,如果我把事情搞砸了,我向你道歉。我试图将条件格式应用于gt表的多个列(比较SampA、SampB和SampB的结果以限制)。在其中一个和另一个的引导下,我使用以下代码成功地将其应用于单个列(变量):

## Conditional Formatting of single column in gt table

samples = as_tibble(cbind("Chem"=c("Cd","Pb","Zn"),
                       "Limit"=c("0.005","0.05","0.007"),
                       "SampA" = c("0.001","0.15","0.003"),
                       "SampB" = c("0.002","0.04","0.005"),
                       "SampC" = c("0.009","0.23","0.03")))

gt(samples,rowname_col="Chem") %>% tab_style(
        style = list(
                cell_fill(color = "grey80"),
                cell_text(weight = "bold")
        ),
        locations = cells_body(
                columns = vars(SampA),
                rows = SampA >= Limit
        )
    )   %>% tab_spanner(
            label = "Samples",
            columns = vars(SampA,SampB,SampC))

但是,我没有成功地尝试将其扩展到多个列。我可以让'columns'参数与'vars(SampA、SampB、SampC)'一起使用。将'rows'参数保留为'SampA>=Limit',格式化'works'的意思是,SampA>=Limit的所有行都在三个Samp列中高亮显示,但这不是我要的。运行下面的代码不会对任何列进行格式化

        locations = cells_body(
                columns = vars(SampA,SampB,SampC),
                rows = vars(SampA,SampB,SampC) >= Limit
        )

通过重复为每一列量身定制的“style_tab()”,我已经能够“蛮力地”实现我所追求的目标,但我知道必须有更好的方法来实现我的目标。帮忙


图书馆(gt)
样品=可吸收(cbind(“化学”)=c(“Cd”、“Pb”、“Zn”),
“限值”=c(“0.005”、“0.05”、“0.007”),
“SampA”=c(“0.001”、“0.15”、“0.003”),
“SampB”=c(“0.002”、“0.04”、“0.005”),
“SampC”=c(“0.009”、“0.23”、“0.03”))
样本百分比
变异(极限=数值(极限))
gt(样本,
rowname_col=“Chem”)%%>%
选项卡样式(样式=列表(单元格填充(颜色=黄色)),
单元格文本(权重=‘粗体’),
位置=单元体(列=变量(SampA),
行=SampA>=限制]%>%
选项卡样式(样式=列表(单元格填充(颜色=黄色)),
单元格文本(权重=‘粗体’),
位置=单元体(列=变量(SampB),
行=SampB>=限制]%>%
选项卡样式(样式=列表(单元格填充(颜色=黄色)),
单元格文本(权重=‘粗体’),
位置=单元体(列=变量(SampC),
行=SampC>=限制]%>%
tab_扳手(
label=“Samples”,
列=变量(SampA、SampB、SampC))

gt是一种全新的技术,因此目前还不能保证有更好的方法。好的,谢谢Mark。很抱歉耽搁了……时间太长了,我已经放弃了对任何人的回应。我想我会离开这个帖子,看看有没有人在某个时候有答案。干杯,加里。谢谢你的回复!我在度假,因此延迟了回复。您的代码本质上就是我为上面的“暴力”方法所做的。我希望有一个选项可以同时处理多个列(想象一下,尝试对100个样本执行此操作)。尽管如此,您的代码对其他人还是有帮助的,因为我没有明确显示我的“暴力”方法。谢谢Gary@gsm您可以在使用
data\u color
@Mooks中看到接受问题的第一个选项。我可能错过了什么。该示例用于将相同的条件结构应用于单个列(或所有列)。我看不出它将如何应用到我的示例中,其中的条件因行而异。正如上面Susan的代码所示,按行应用条件的挑战在于指定应用格式的位置……我可以指定多列,但不能指定行(例如,我只能让“SampA>=Limit”起作用,而说“SampA:SampC>=Limit”则更好或者类似的。谢谢,你说得对,我一整天都在看这么多的例子——我错过了这个更微妙的例子。

library(gt)
samples = as_tibble(cbind("Chem"=c("Cd","Pb","Zn"),
                          "Limit"=c("0.005","0.05","0.007"),
                          "SampA" = c("0.001","0.15","0.003"),
                          "SampB" = c("0.002","0.04","0.005"),
                          "SampC" = c("0.009","0.23","0.03")))

samples <- samples %>% 
  mutate(Limit = as.numeric(Limit))

gt(samples,
   rowname_col="Chem") %>% 
  tab_style(style = list(cell_fill(color = 'yellow'), 
                         cell_text(weight = 'bold')), 
            locations = cells_body(columns=vars(SampA), 
                                   rows = SampA >= Limit)) %>% 
  tab_style(style = list(cell_fill(color = 'yellow'), 
                         cell_text(weight = 'bold')), 
            locations = cells_body(columns=vars(SampB), 
                                   rows = SampB >= Limit)) %>% 
  tab_style(style = list(cell_fill(color = 'yellow'), 
                         cell_text(weight = 'bold')), 
            locations = cells_body(columns=vars(SampC), 
                                   rows = SampC >= Limit)) %>% 
  tab_spanner(
  label = "Samples",
  columns = vars(SampA,SampB,SampC))