在将 as_grouped_data 与 flextable 一起使用时是否可以有条件地格式化行?

Is it possible to conditionally format rows while using as_grouped_data with flextable?

我试图在调用 as_grouped_data 后根据分组行的条件有条件地格式化行:

library(tidyverse)
library(flextable)

df <- tibble(vStat = c(rep("Average Degree", 3), rep("Average Weight", 3)),
             val = c(1.22222, 1.33333, 1.44444, 1.55555, 1.66666, 1.77777))

flextable(df %>%
            as_grouped_data(groups="vStat")) %>%
  colformat_double(i = ~ vStat=="Average Degree", digits=1) %>% # not working
  colformat_double(i = ~ vStat=="Average Weight", digits=3) %>% # not working
  autofit()

我知道以上内容不起作用,因为 colformat_double 中的条件仅适用于 val 现在为 NA 的行:

df %>%
  as_grouped_data(groups="vStat")

>            vStat     val
> 1 Average Degree      NA
> 3           <NA> 1.22222
> 4           <NA> 1.33333
> 5           <NA> 1.44444
> 2 Average Weight      NA
> 6           <NA> 1.55555
> 7           <NA> 1.66666
> 8           <NA> 1.77777

它似乎不像调用 first:

时分组数据通常那样工作
flextable(df %>%
            as_grouped_data(groups="vStat")) %>%
  colformat_double(i = ~ first(vStat=="Average Degree"), digits=1) %>%
  colformat_double(i = ~ first(vStat=="Average Weight"), digits=3) %>%
  autofit()

> Error in get_rows_id(x[[part]], i) : invalid row selection: length(i) [1] != nrow(dataset) [8]

在分组之前对数据集进行舍入也没有得到我想要的结果,数字的数量仍然达到最高条件并用零填充:

flextable(df %>%
            mutate(val = case_when(vStat=="Average Degree" ~ round(val, 1),
                                   vStat=="Average Weight" ~ round(val, 3))) %>%
            as_grouped_data(groups="vStat")) %>%
  autofit()

当我的数据每天都在变化时,我真的很想不必在 table 的 table 中指定单独的行号。

我们可以创建一个索引列或用另一个名称复制相同的列'vStat'并对索引执行条件或在另一列上使用相同的代码并稍后将其删除

library(dplyr)
library(flextable)
flextable(df %>%
            mutate(ind = match(vStat, unique(vStat))) %>%
            as_grouped_data(groups="vStat")) %>%
  colformat_double(i = ~ ind == 1, digits=1) %>% # not working
  colformat_double(i = ~ ind == 2, digits=3) %>% # not working
   void(j = ~ind) %>%
  compose( j = 3, value = as_paragraph(""), part = "header") %>%

  autofit()

-输出