Почему kableExtra cell_spe c теряет завершающие десятичные нули во время условного форматирования? - PullRequest
2 голосов
/ 27 февраля 2020

Мне нравится иметь два десятичных знака, которые обычно работают с kable. Но использование kableExtra для условного форматирования не показывает конечные нули, если есть одна ячейка, для которой условие TRUE.

MWE показывает ситуацию, когда я получаю одну полужирную ячейку, если значение больше 1,2, и ситуацию без полужирной ячейки, если значение не больше 1,5. Условное форматирование работает как положено. Но в 3 из 4 примеров я теряю завершающие нули.

Любые идеи, почему (и как предотвратить эффект) очень приветствуются.

# 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)

item

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_spe c (dfitem, полужирный = 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_spe c (dfitem, полужирный = ifelse (dfitem> 1,5) , «ИСТИНА», «ЛОЖЬ»))

1

1,2

1,23

1 Ответ

0 голосов
/ 03 марта 2020

Эффект возникает потому, что после cell_spe c элемент преобразуется в символ. Создание еще одного столбца и преобразование в символ с завершающим нулем до того, как cell_spe c сделает свое дело.

Тем не менее условие для cell_spe c соответствует исходным значениям.

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

...