【问题标题】:Mathematical units in gt table with Rmarkdown带有 Rmarkdown 的 gt 表中的数学单位
【发布时间】:2021-08-21 00:24:00
【问题描述】:

我有这个dataframe

df = data.frame(a = c("$B_{a}$", "$m^{a}$"))

当我在Rmarkdown 中使用kable 制作表格时,如下所示:

df %>% knitr::kable()

knitpdf_document,我明白了:

这是我的预期。

现在,我想重现同一张表,但使用包 gt。当我这样做时:

library(gt)
df %>% gt()

我明白了:

我还需要做什么才能让gt 表“理解”这些是数学符号?

【问题讨论】:

  • 对于gt,您可能需要sup,即类似于df1 <- data.frame(a = "B<sup>a</sup>"); > df1 %>% gt() %>% fmt_markdown(columns = everything())
  • @akrun 因为我不知道html 我不喜欢做这样的事情。你认为这是唯一的方法吗?
  • 我认为fmt_markdown 遵循降价语法。你想把原来的数据语法转换成我展示的吗

标签: r r-markdown kable gt


【解决方案1】:

<sub></sub><sup></sup>gt 一起使用。一种选择是使用来自stringrstr_remove/str_replace 将原始数据集列中的字符替换为html 语法

library(gt)
library(stringr)
library(dplyr)
df %>%
    mutate(a = str_remove_all(a, "[{}$]") %>% 
         str_replace_all( c('(.)_(.)', "(.)\\^(.)"),
           c("\\1<sub>\\2</sub>", "\\1<sup>\\2</sup>"))) %>%
     gt() %>%
     fmt_markdown(columns = everything())

-输出

【讨论】:

  • 这确实适用于我展示的过于简化的示例,但实际上,我有许多列具有许多不同类型的 非常 值(3-4 A4 页面)复杂的物理单位不一定像我展示的这个例子。
  • @bird 好的,如果您有多个列,请使用 mutate(across(yourcolumns, . 并对这些选定的列进行转换。我展示了一种将原始示例转换为gt 可以工作的格式的方法
  • @bird 否则,如果您有很多更改,则可能必须使用 html 标签重写它
  • 我同意您建议的方法适用于我发布的这个特定问题,但我觉得使用这种方法我必须学习 html 并做很多不同的 html 标记来更改每个单元分开(因为它们不遵循相同的模式)
  • @bird 您对此的预期解决方案是什么。问题是针对自动转换 kable 代码还是在当前版本中解析 gt
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 2021-08-10
  • 2021-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多