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

时间:2018-10-08 07:13:45

标签: r knitr superscript

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

示例数据:

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

任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:2)

是否要输出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在表格内添加LaTeX。

答案 1 :(得分:2)

您可以使用tableHTML

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


library(dplyr)
library(tableHTML)

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

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

result

修改

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

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