为什么 kableExtra cell_spec 在条件格式设置期间丢失尾随的小数零?

Why does kableExtra cell_spec lose trailing decimal zeros during conditional formatting?

我喜欢有两位小数,这通常适用于 kable。但是,如果有一个条件为 TRUE 的单元格,则使用 kableExtra 进行条件格式化不会显示尾随零。

MWE 显示了一种情况,如果值大于 1.2,我得到一个粗体单元格,而没有粗体单元格,因为没有值大于 1.5。条件格式按预期工作。但是在 4 个示例中的 3 个中,我丢失了尾随零。

非常欢迎任何想法(以及如何防止这种影响)。

# MWE kableExtra cell_spec loses trailing decimal zeros during conditional formatting

rm(list=ls())
library("knitr")
library("kableExtra") 
library("dplyr")


df <- data.frame(item=c(1 , 1.2, 1.23))

# Condition for cell-specification for each cell false
df[df$item>1.5,1] <- cell_spec (df[df$item>1.5,1], "html",bold=TRUE)

# output for each cell with two decimals
knitr::kable(df, digits=2,  escape=FALSE)

项目

1.00

1.20

1.23

df <- data.frame(item=c(1 , 1.2, 1.23))
# Condition for cell-specification for one cell true
df[df$item>1.2,1] <- cell_spec (df[df$item>1.2,1], "html",bold=TRUE)

# output for each cell with needed decimals only, trailing zeros lost
knitr::kable(df, digits=2, escape=FALSE)

项目

1

1.2

1.23

df <- data.frame(item=c(1 , 1.2, 1.23))
# alternative way loses trailing zeros whether condition is TRUE or FALSE 
df %>%
  transmute(cell_spec(df$item, bold=ifelse(df$item>1.5,"TRUE","FALSE"))) %>%
  kable( digits=2, escape=FALSE)

cell_spec(dfitem,bold=ifelse(dfitem > 1.5, “TRUE”, “FALSE”))

1

1.2

1.23

df <- data.frame(item=c(1 , 1.2, 1.23))
df %>%
  transmute(cell_spec(df$item, bold=ifelse(df$item>1.2,"TRUE","FALSE"))) %>%
  kable( digits=2, escape=FALSE)

cell_spec(dfitem,bold=ifelse(dfitem > 1.5, “TRUE”, “FALSE”))

1

1.2

1.23

效果的产生是因为cell_specitem被转换为字符后。在 cell_spec 之前创建另一列并转换为带有尾随零的字符。

然而 cell_spec 的条件遵循原始值。

df <- data.frame(item=c(1 , 1.2, 1.23))


df$itemCharacter <- as.character(formatC(df$item, digits = 2, format = 'f')) #new character variable with format specification

df[df$item>1.2,2] <- cell_spec (df[df$item>1.2,2], "html",bold=TRUE) #condition for cell_spec with the old variable, but assigned to the new variable

knitr::kable(df$itemCharacter, digits=2,  escape=FALSE) #output of the new variable

x

1.00

1.20

1.23