Я пытаюсь создать таблицу, и после одной из моих переменных должен быть надстрочный индекс другой переменной. Я могу найти здесь несколько связанных ответов на 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()

Любая помощь оценили.

1
Steen Harsted 8 Окт 2018 в 10:13

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

< Сильный > Edit

Как указал Стин, это также работает с knitr:

df %>% 
  mutate(X = paste0(X, "<sup>", Y, "</sup>")) %>% 
  select(X) %>% 
  knitr::kable(escape = FALSE)
2
clemens 9 Окт 2018 в 06:59

Это для вывода 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 в таблицу.

2
Rekyt 8 Окт 2018 в 07:45