【发布时间】:2021-12-22 10:47:04
【问题描述】:
在调用 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()
当我的数据每天都在变化时,我真的不想在一个有 50 行的表中指定 colformat_double 中的单个行号。
【问题讨论】: