在 R 和 knitr 中构建表时在另一个变量上标上标

Superscripting a variable over another when building tables in R and knitr

我正在尝试构建一个 table,我的一个变量后面应该有另一个变量上标。我可以在 SO 上找到几个相关的答案,但它们都涉及需要上标的固定值,而不是像我这样的向量。
此外,大多数示例都涉及情节图例,而不是 table 像我的情况(尽管我认为这没有太大区别)。

示例数据:

library(tidyverse)
library(knitr)

df <- crossing(
  X = seq(1:2),
  Y = c("A", "B"))

df

# A tibble: 4 x 2
      X Y    
  <int> <chr>
1     1 A    
2     1 B    
3     2 A    
4     2 B  

我想改变一个新变量,它只是 X 后面有 Y 值上标。

这是我尝试过的方法(无效):

df %>% mutate(
  New = paste0(X, "^Y")) %>% 
  kable()

df %>% mutate(
  New = paste0(X, ^{Y})) %>% 
  kable()

df %>% mutate(
  New = paste0(X, bquote(^~{.Y}~))) %>% 
  kable()

感谢任何帮助。

是否用于 pdf 输出? 因为在这种情况下,以下可能有效:

library(tidyverse)
library(knitr)

df <- crossing(
    X = seq(1:2),
    Y = c("A", "B"))

df %>% mutate(
    New = paste0(X, "\textsuperscript{", Y, "}")) %>% 
    kable(escape = FALSE)

使用 escape = FALSE 在 table 中添加 LaTeX。

你可以使用 tableHTML:

df <- data.frame(
  X = seq(1:2),
  Y = c("A", "B"))


library(dplyr)
library(tableHTML)

您可以使用 HTML 标记 <sup> 稍微修改 X 以将 Y 显示为超集:

df %>% 
  mutate(X = paste0(X, "<sup>", Y, "</sup>")) %>% 
  select(X) %>% 
  tableHTML(rownames = FALSE,
            escape = FALSE,
            widths = 50)

编辑

正如 Steen 所指出的,这也适用于 knitr:

df %>% 
  mutate(X = paste0(X, "<sup>", Y, "</sup>")) %>% 
  select(X) %>% 
  knitr::kable(escape = FALSE)