Программное создание таблиц уценки в R с помощью KnitR
Я только начинаю узнавать о KnitR и использовании Markdown при создании R документов и отчетов. Это выглядит идеально подходит для многих изо дня в день отчетности, что я должен делать с моей работой. Однако одна вещь, которую я не вижу, - это простой способ печати фреймов данных и таблиц с использованием форматирования Markdown (вроде xtable
, но с уценкой вместо LaTeX или HTML). Я знаю, что я могу просто встроить вывод HTML из xtable, но мне было интересно, есть ли какие-либо Решения на основе уценки?
7 ответов:
теперь
knitr
(начиная с версии 1.3) пакет включаетkable
функции для создания таблиц:> library(knitr) > kable(head(iris[,1:3]), format = "markdown") | Sepal.Length| Sepal.Width| Petal.Length| |-------------:|------------:|-------------:| | 5,1| 3,5| 1,4| | 4,9| 3,0| 1,4| | 4,7| 3,2| 1,3| | 4,6| 3,1| 1,5| | 5,0| 3,6| 1,4| | 5,4| 3,9| 1,7|
обновлено: если вы получаете raw markdown в документе попробуйте setup
results = "asis"
chunk вариант.
два пакета, которые будут делать это пособничать
library(devtools) install_github('pander', 'Rapporter')
или ascii
pander
это немного другой подход к построению отчета, (но может быть полезен для этой функции).
ascii
позволитtype = 'pandoc
(или различные другие вкусы markdown)library(ascii) print(ascii(head(iris[,1:3])), type = 'pandoc') **Sepal.Length** **Sepal.Width** **Petal.Length** --- ------------------ ----------------- ------------------ 1 5.10 3.50 1.40 2 4.90 3.00 1.40 3 4.70 3.20 1.30 4 4.60 3.10 1.50 5 5.00 3.60 1.40 6 5.40 3.90 1.70 --- ------------------ ----------------- ------------------
обратите внимание, что в обоих этих случаях он направлен на использование
pandoc
чтобы конвертировать из markdown в нужный тип документа, однако с помощьюstyle='rmarkdown'
создаст таблицы, совместимые с этимmarkdown
пакет и встроенное преобразование вrstudio
.
просто хотел обновить это с тем, что я решил сделать. Я использую
hwriter
пакет прямо сейчас, чтобы распечатать таблицы, и с помощьюrow.*
иcol.*
функции для размещения классов CSS на разных элементах. Затем я написал пользовательский CSS, чтобы сделать мой дисплей, как я хотел. Итак, вот пример, если кто-то еще имеет дело с чем-то подобным.во-первых, создайте файл, который будет делать
knitting
и изменить уценку в HTML:FILE: file_knit.r #!/usr/bin/env Rscript library(knitr) library(markdown) knit("file.Rmd") markdownToHTML("file.md","file.html",stylesheet="~/custom.css")
далее создать фактический файл Markdown:
FILE: file.Rmd Report of Fruit vs. Animal Choices ================================== This is a report of fruit vs. animal choices. ```{r echo=FALSE,results='asis'} library(hwriter) set.seed(9850104) my.df <- data.frame(Var1=sample(x=c("Apple","Orange","Banana"),size=40,replace=TRUE), Var2=sample(x=c("Dog","Cat","Bunny"),size=40,replace=TRUE)) tbl1 <- table(my.df$Var1,my.df$Var2) tbl1 <- cbind(tbl1,rowSums(tbl1)) tbl1 <- rbind(tbl1,colSums(tbl1)) colnames(tbl1)[4] <- "TOTAL" rownames(tbl1)[4] <- "TOTAL" # Because I used results='asis' for this chunk, I can just use cat() and hwrite() to # write out the table in HTML. Using hwrite()'s row.* function, I can assign classes # to the various table elements. cat(hwrite(tbl1, border=NA, table.class="t1", row.class=list(c("header col_first","header col","header col","header col", "header col_last"), c("col_first","col","col","col","col_last"), c("col_first","col","col","col","col_last"), c("col_first","col","col","col","col_last"), c("footer col_first","footer col","footer col","footer col","footer col_last")))) ```
наконец, просто создайте пользовательский файл CSS.
FILE: custom.css body { font-family: sans-serif; background-color: white; font-size: 12px; margin: 20px; } h1 {font-size:1.5em;} table { border: solid; border-color: black; border-width: 2px; border-collapse: collapse; margin-bottom: 20px; text-align: center; padding: 0px; } .t1 .header { color: white; background-color: black; border-bottom: solid; border-color: black; border-width: 2px; font-weight: bold; } .t1 .footer { border-top: solid; border-color: black; border-width: 2px; } .t1 .col_first { border-right: solid; border-color: black; border-width: 2px; text-align: left; font-weight: bold; width: 75px; } .t1 .col { width: 50px; } .t1 .col_last { width: 50px; border-left: solid; border-color: black; border-width: 2px; }
выполнения
./file_knit.r
дает мне файл.HTML, который выглядит так:так что, надеюсь, это может быть полезно для других, кто хочет немного больше форматирования в выводе Markdown!
есть функции в
pander
пакет:> library(pander) > pandoc.table(head(iris)[, 1:3]) ------------------------------------------- Sepal.Length Sepal.Width Petal.Length -------------- ------------- -------------- 5.1 3.5 1.4 4.9 3 1.4 4.7 3.2 1.3 4.6 3.1 1.5 5 3.6 1.4 5.4 3.9 1.7 -------------------------------------------
не очень трудно сделать вашу собственную подгонянную функцию. Вот очень простое доказательство концепции для создания таблицы rmarkdown a
data.frame
:rmarkdownTable <- function(df){ cat(paste(names(df), collapse = "|")) cat("\n") cat(paste(rep("-", ncol(df)), collapse = "|")) cat("\n") for(i in 1:nrow(df)){ cat(paste(df[i,], collapse = "|")) cat("\n") } invisible(NULL) }
In .Документ Rmd вы бы тогда использовали функцию с
results = 'asis'
:```{r, results = 'asis'} rmarkdownTable <- function(df){ cat(paste(names(df), collapse = "|")) cat("\n") cat(paste(rep("-", ncol(df)), collapse = "|")) cat("\n") for(i in 1:nrow(df)){ cat(paste(df[i,], collapse = "|")) cat("\n") } invisible(NULL) } rmarkdownTable(head(iris)) ```
приведенный выше код даст вам следующий рисунок (в примере это вывод pdf, но поскольку таблица находится в markdwon, вы также можете связать в html или word).
Отсюда-и чтение другое peoples code-вы можете выяснить, как управлять текстом для создания таблицы, которую вы хотите, и создавать более персонализированные функции.
используйте комбинацию knitr:: kable и xtable в вашем документе markdown.
library("knitr","xtable")
для простых данных.кадр -
kable(head(mtcars[,1:4]),format="markdown") kable(head(mtcars[,1:4]),format="pandoc",caption="Title of the table")
format="pandoc"
позволяет больше вариантов, таких как подпись.теперь комбинацию модель резюме.
data(tli) fm1 <- aov(tlimth ~ sex + ethnicty + grade + disadvg, data=tli) kable(xtable(fm1), caption = "Annova table")
для еще большего количества вариантов посмотрите на
stargazer
пакета вместоxtable
.
для записи / создания таблиц уценки в R, вы также можете использовать MarkdownReports'
MarkDown_Table_writer_DF_RowColNames()
илиMarkDown_Table_writer_NamedVector()
функции. Вы просто передаете фрейм данных / матрицу с именами измерений или вектор с именами, и он анализирует и записывает таблицу в формате Markdown.