为什么 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
我喜欢有两位小数,这通常适用于 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