2015-06-23 1 views
4

У меня есть фактор в R, который состоит из уровней a, b и c. Данные состоят из 2 a, одного b и no c. Я хочу, чтобы получить выходной сигнал, как этот (частота элементов по уровням):Печать частотной таблицы коэффициента с помощью kable в rmarkdown

fac <- factor(c("a", "b", "a"), levels=c("a", "b", "c")) 
tbl <- table(fac) 
tbl 

## fac 
## a b c 
## 2 1 0 

Это должно быть напечатано с knitr/Kable в хорошем HTML таблице:

library(knitr) 
kable(tbl) 

Но вот приходит ошибка:

"Error in dn[[2L]] : subscript out of bounds". 

Я предполагаю, что есть проблема с dimnames таблицы:

attributes(tbl) 
## $dim 
## [1] 3 
## 
## $dimnames 
## $dimnames$fac 
## [1] "a" "b" "c" 
## 
## 
## $class 
## [1] "table" 

Есть ли возможность «восстановить» dimnames для kable? Я просто хочу напечатать этот «простой» стол - может быть, я застрял с чем-то легким?

Использование «стол» с факторами описано здесь: http://www.stat.berkeley.edu/~s133/factors.html

Я много читал о «pander'-пакета в последние дни. Если я распечатаю таблицу с помощью pander, она будет работать. Зачем? Должен ли я просто переключиться на pander?

pander(tbl) 
+1

Я сопровождающий 'pander', поэтому мой взгляд несколько искажен :) Но' pander' предлагает гораздо больше возможностей для [конвертировать таблицы R в уценки ] (http://rapporter.github.io/pander/#markdown-tables), не говоря уже о [поддержке связки классов S3] (http://rapporter.github.io/pander/#generic-pander -метод). – daroczig

+0

Я попробую это позже, это кажется замечательным. Но я скорее хочу иметь возможность использовать разные пакеты. Я полагаю, что пандер может делать все, что может сделать каббл, но не наоборот. – BumbleBee

+0

Я не уверен, в чем преимущество попытки решить проблему с одним пакетом, который уже разрешен другим, но я уверен, что у вас есть свои мотивы. О 'pander' vs' kable': назначение этих функций немного отличается. 'kable' заключается в рендеринг основных таблиц markdown/LaTeX/HTML, а' xtable' может отображать сложные таблицы LaTeX, а 'pander' обеспечивает полную поддержку таблиц разметки. – daroczig

ответ

5

Вы можете попробовать

> kable(t(as.matrix(tbl))) 
# 
#| a| b| c| 
#|--:|--:|--:| 
#| 2| 1| 0| 
+2

Формат 'table' не всегда очень практичен. Поэтому часто бывает удобно преобразовать таблицу в матрицу или в кадр данных, если выход должен быть обработан дальше. – RHertel

+0

Спасибо, это трюк! Я попробовал data.frame, но это не сработало, так что это лучший подход. – BumbleBee