Как я могу создать таблицы качества отчетов из R?
-
05-07-2019 - |
Вопрос
Если у меня есть следующий фрейм данных с именем result
> result
Name CV LCB UCB
1 within 2.768443 1.869964 5.303702
2 between 4.733483 2.123816 18.551051
3 total 5.483625 3.590745 18.772389
> dput(result,"")
structure(list(Name = structure(c("within", "between", "total"
), .rk.invalid.fields = list(), .Label = character(0)), CV = c(2.768443,
4.733483, 5.483625), LCB = c(1.869964, 2.123816, 3.590745), UCB = c(5.303702,
18.551051, 18.772389)), .Names = c("Name", "CV", "LCB", "UCB"
), row.names = c(NA, 3L), class = "data.frame")
Как лучше всего представить эти данные? В идеале мне нужен файл изображения, который можно вставить в отчет, или, возможно, файл HTML для представления таблицы?
Дополнительные баллы для установки количества значащих цифр.
Решение
Я бы использовал xtable . Я обычно использую это с Sweave.
library(xtable)
d <- data.frame(letter=LETTERS, index=rnorm(52))
d.table <- xtable(d[1:5,])
print(d.table,type="html")
Если вы хотите использовать его в документе Sweave, вы должны использовать его следующим образом:
<<label=tab1,echo=FALSE,results=tex>>=
xtable(d, caption = "Here is my caption", label = "tab:one",caption.placement = "top")
@
Другие советы
Что касается таблицы, поставляется пакет xtable . на ум, поскольку он может производить вывод LaTeX (который вы можете использовать через Sweave для профессиональных отчетов), а также HTML.
Если вы объедините это в Sweave с причудливыми графиками (см. другие вопросы для примеров ggplot), вы почти готовы.
library(ggplot2)
ggplot(result, aes(x = Name, y = CV, ymin = LCB, ymax = UCB)) + geom_errorbar() + geom_point()
ggplot(result, aes(x = Name, y = CV, ymin = LCB, ymax = UCB)) + geom_pointrange()
Не могу прокомментировать создание красивой таблицы, но чтобы установить значимые цифры, проще всего сделать это (для данных примеров, обратите внимание), чтобы переместить Имя в имена строк и округлить все это.
#Set the rownames equal to Name - assuming all unique
rownames(result) <- result$Name
#Drop the Name column so that round() can coerce
#result.mat to a matrix
result.mat <- result[ , -1]
round(result.mat, 2) #Where 2 = however many sig digits you want.
Это не очень надежное решение - я думаю, что неуникальные значения Name сломают его, как и другие нечисловые столбцы. Но для создания таблицы, подобной вашему примеру, это помогает.