【问题标题】:How can I subscript names in a table from kable()?如何从 kable() 为表中的名称下标?
【发布时间】:2017-09-05 11:31:41
【问题描述】:

给定一个 data.frame A,我如何使用下标的行和列名称?最终我想通过 rmarkdown 中的 kable() 生成一个表格(输出:word 文档)。

A <- data.frame(round(replicate(3, runif(2)),2))
rownames(A) <- c("Hola123", "Hola234")
A

          X1   X2   X3
Hola123 0.47 0.55 0.66
Hola234 0.89 0.45 0.20

通过 kable(A) 创建表时,如何使行名和列名中的所有数字都下标?

我试过了:

rownames(A) <- c(expression(Hola["123"]), expression(Hola["234"]))
names(A) <- c(expression(X["1"]), expression(X["2"]), expression(X["3"]))

但是在.rmd文件中通过kable()创建表时,它并没有出现下标。

【问题讨论】:

    标签: r r-markdown names subscript rowname


    【解决方案1】:

    要在 rmarkdown 文档中添加下标,您可以在两个波浪号之间嵌入文本:text~sub~。 使用函数kable 时,表中的任何文本都被识别为markdown 语法。所以你的 rmarkdown 代码应该是:

    ```{r}
    A <- data.frame(round(replicate(3, runif(2)),2))
    rownames(A) <- c("Hola~123~", "Hola~234~")
    names(A) <- c("X~1~", "X~2~", "X~3~")
    knitr::kable(A)
    ```
    

    【讨论】:

    • 这花了我一些时间来弄清楚,所以以防万一有人想用latex 表重复pdf 输出:你不能在latex 表中使用markdown 语法!您需要做的是将escape = F 添加到kable(),然后使用latex 语法,例如\\texsubscript{ }(注意附加的/),例如:Hola\\texsubscript{123}
    • 就像 Rubem 在下面指出的那样,这是拼写错误:使用 \\textsubscript{123}。这只是给像我一样阅读tex的未来读者的说明,然后说“啊,我猜这对 LaTeX 命令有意义”,然后停止进一步阅读。
    【解决方案2】:

    关于 bamphe 的回应只有一个说明是正确的代码拼写错误。应该是\\textsubscript{}。它缺少第二个“t”。

    完成答案后,您可以选择在kable 中使用参数row.namescol.names,方式如下:

    A <- data.frame(round(replicate(3, runif(2)),2))
    
    rownames(A) <- c("Hola\\textsubscript{123}", "Hola\\textsubscript{234}")
    
    knitr::kable(A,
                 row.names = T,
                 col.names = c("X\\textsubscript{1}", "X\\textsubscript{2}", "X\\textsubscript{3}"),
                 escape = F)
    

    【讨论】:

    • 请注意,表中包含特殊字符 ( & % $ # _ { } ~ ^ `) 的数据和名称也需要使用 \\ 进行转义。如果您使用正则表达式进行转义,那么您还需要转义正则表达式中的斜杠,因此您最终会得到类似str_replace_all(str, "_", "\\\\_") 的代码。
    【解决方案3】:

    我也在寻找一种方法,它允许 subscriptsuperscripthtml 和 pdf 格式 在 markdown 表中使用卡布尔。经过一番搜索,终于找到了@yihui-xie这里解释的文字参考方法:bookdownguide

    (ref:foo) H~2~O 其中foo 是参考,H~2~O 是文本。

    我的代码示例展示了如何使用文本引用。确保遵循基本规则:

    1. 引用在整个文档中必须是唯一的
    2. 引用不应在“要插入的内容”后面有空格
    3. 引用必须在自己的段落中,并且在其上方和下方都有一个空行

    请注意,只有引用的“foo”和“fo”会给出下标,而 ~[]~ 方法只适用于 html 而不是 pdf。

    
    (ref:foo) CO~2~/CO~2~
    
    (ref:fo) CO~2~
    
    
    ```{r chunk-to-show-the-text-reference-method, echo = FALSE }
    library(dplyr)
    library(knitr)
    library(kableExtra)
    
    # Make lists
    dtmin_name <- c("ref/ref","refrigerant/CO2","(ref:foo)",paste0("ground/","(ref:fo)"),"ground/water","air/refrigerant","water/refrigerant","water/CO2")
    temp_diff <- c( 2.3, 1.4, 0.8, 6.8, 14, 6, 4, 3.46)
    
    # Make dataframe and column names
    dtmin_df <- data.frame(dtmin_name,temp_diff, stringsAsFactors = FALSE)
    colnames <- data.frame("Interface Type ", "dT~min~ Interval [K]", stringsAsFactors = FALSE)
    colnames(dtmin_df) <- colnames
    
    # Make Table
    kable(dtmin_df, caption = "Typical dT~min~ Temperature Intervals", booktabs = TRUE, format.args = list(big.mark = ",")) %>%
      kable_styling(bootstrap_options = c("striped", "hover"),latex_options = c("striped","scale_down"))```
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-04
      • 1970-01-01
      • 2021-08-22
      • 2021-09-30
      • 2019-04-28
      • 1970-01-01
      相关资源
      最近更新 更多