Knitr Kable сохранит верхнее левое имя в таблице - PullRequest
0 голосов
/ 15 октября 2019

В R Markdown при попытке создать таблицу с использованием knitr::kable() по умолчанию она сохраняет только имена строк и столбцов, но не сохраняет верхнюю левую ячейку, которая в моем случае является именем таблицы.

Скажем, например, у вас есть набор данных радужной оболочки, и проведите PCA только на цветах сетоз, а затем хотите показать первые 2 ПК. т.е.

set.pca <- prcomp(iris[which(iris[,5] == "setosa"),1:4])
t1 <- as.table(set.pca$rotation[,1:2]);t1
dimnames(t1) = list(Setosa=rownames(t1), colnames(t1))

t1 в этом случае должно быть:

Setosa                 PC1         PC2
  Sepal.Length -0.66907840  0.59788401
  Sepal.Width  -0.73414783 -0.62067342
  Petal.Length -0.09654390  0.49005559
  Petal.Width  -0.06356359  0.13093791

, но, поскольку я хочу поместить это в Markdown, используя Kable(), на выходе будет

|             |        PC1|        PC2|
|:------------|----------:|----------:|
|Sepal.Length | -0.6690784|  0.5978840|
|Sepal.Width  | -0.7341478| -0.6206734|
|Petal.Length | -0.0965439|  0.4900556|
|Petal.Width  | -0.0635636|  0.1309379|

Как видно, " Setosa " отсутствует в этой таблице. Как вы сохраняете это верхнее левое значение?

1 Ответ

0 голосов
/ 16 октября 2019

Любой из этих двух вариантов должен работать для вас:

library(knitr)
library(kableExtra)
library(reshape2)
library(dplyr)
library(magrittr)
library(tidyr)

data(iris)

set.pca <- prcomp(iris[which(iris[,5] == "setosa"),1:4])
t1 <- as.table(set.pca$rotation[,1:2]);t1
dimnames(t1) = list(Setosa=rownames(t1), colnames(t1))

# using library reshape2
data.frame(t1) %>% reshape(idvar="Setosa", timevar="Var2", direction="wide") %>%
     kable() %>% kable_styling()

enter image description here

# using library tidyr
data.frame(t1) %>% spread(Var2, Freq) %>% kable() %>% kable_styling()

enter image description here

В последней версии tidyr появилась новая функция, которую вы также можете изучить, pivot_wider. Я думаю, что он предназначен для замены spread.

...