首页 > 解决方案 > 如何在 kableExtra 表的某些列中使用数学符号或工程符号?

问题描述

可以将docxtools::format_engr()应用于表格以从计算机符号切换到工程符号。

符号类型 (来源:docxtools

应用于docxtools::format_engr()df 会将所有列更改为工程符号。

  1. 如何将该函数仅应用于 df 的某些列?
  2. 数学符号是否有等效函数?

对于下面的玩具示例,我们的想法是获取p_Pa工程/数学符号中的列,而所有其他列保持不变。

MWE

根据需要的表仅缺少p_Pa工程符号中的列

library(docxtools)
density2 <- density
density2$density <- density2$density*1000
kable(density2, digits = 2)

目标

应用格式:“所有”列更改为工程符号

# Apply formatting:
density_engr <- density2 %>%
  docxtools::format_engr()
kable(density_engr)

全部取幂

传递sigdig()docxtools::format_engr()(例如,sth. like "sigdig = c(0,0,2,3,2,3)")来定义如何格式化哪一列在这里没有帮助。工程符号仍然适用于所有列,只是位数不同。

这个想法是将 df 作为kableExtra表格包含在使用PDF 和 HTMLR markdown编译的报告中。knitr

标签: rr-markdownnotationkablekableextra

解决方案


您可以创建一个仅包含要格式化的列的数据框,对其进行格式化,然后将其分配到原始位置。例如,从您的density2:

density_engr <- density2        # no formatting yet
do_format <- c("T_K", "p_Pa")   # which columns to format?
density_engr[do_format] <- docxtools::format_engr(density_engr[do_format])

除了 之外,还有其他方法可以进行索引density_engr[do_format],但要小心:您要确保获得数据框作为结果,您不想提取列。


推荐阅读