Это немного сложнее, но я бы воспользоваться тем, что клетки с НСБУ печатаются пустые по print.xtable -функции , Ячейки не действительно «слиты», но выглядит так, когда содержимое выровнено сверху.
В основном шаги:
- Сформировать подходящую data.frame в R
- Распечатать совместимый таблицу .tex использование print.xtable из пакета 'xtable'
- Используйте Sweave/knitr/etc для создания подходящего .tex
- tools :: texi2pdf затем преобразует ваш .tex в подходящий .pdf
Вот файлы, вам нужно только подключим RunSweave.R в вашем R терминале (и убедитесь, что LaTeX устанавливается вместе с необходимыми пакетами, т.е. «xtable и имеют файлы в одной папке; это было запущено в Windows).
Файл StackExampleCode.R:
# StackExampleCode.R
library(xtable)
# A work-around by setting rows in the multi-row to NA after the initial top-justified line
header <- data.frame(test = "Tests", det = "Details", cause = "Cause", prob = "Probability", fb = "Feedback")
# Filling the fields for these is something you'd probably want to do in R in a more sophisticated manner
test1 <- data.frame(
test = c("Test 1", NA, NA, NA, NA),
det = c("Description", NA, NA, NA, NA),
cause = c("Cause 1", NA, paste("Cause", 2:4)),
prob = c(".5", NA, ".2", ".1", ".2"),
fb = c("positive", NA, "negative", "negative", "negative")
)
test2 <- data.frame(
test = c("Test 2", NA, NA, NA),
det = c("Description", NA, NA, NA),
cause = c(paste("Cause", 1:3), NA),
prob = c(".7", ".1", ".2", NA),
fb = c("positive", "negative", "negative", NA)
)
# Bind it all together, you probably want something similar if it's automatic data you're generating
tab <- rbind(header, test1, test2)
Файл StackExampleRnw.Rnw:
% StackExampleRnw.Rnw
% Note the different comment char, writing .tex here
\documentclass{article}
\begin{document}
<<echo=FALSE, results=tex>>=
# Printing the table
print(
xtable(tab,
align = "|l|l|l|l|l|l|" # Create the desired vertical lines and text alignments ala LaTeX; left align with vertical lines in-between each column)
),
add.to.row = list(# Add horizontal lines to correct spots, should be adjusted according to the desired data
pos = list(-1, 1, 6, nrow(tab)),
command = c("\\hline \n", "\\hline \n", "\\hline \n", "\\hline \n") # Horizontal lines and a neater formatting of output using a linechange
),
include.rownames = FALSE, # Don't include the rownames (which would be just numbers)
include.colnames = FALSE, # Don't include the rownames, these were already included as if it was an ordinary table row
hline.after = NULL # Suppress the empty horizontal line that is intended for an automated caption
)
@
\end{document}
Файл RunSweave.R:
# RunSweave.R
# Run the code
source("StackExampleCode.R")
# Bundle R code with LaTeX
Sweave("StackExampleRnw.Rnw")
# .tex -> .pdf
tools::texi2pdf("StackExampleRnw.tex")
Вот как это выглядит для меня в StackExampleRnw.pdf:
В качестве альтернативы, вы можете получить доступ непосредственно к таблице в .tex в файле StackExampleRnw.tex и сделайте некоторое дополнительное форматирование, если вам это удобно. Выше не требуется никаких дополнительных настроек в .tex, но вам нужно убедиться, что вы помещаете горизонтальные линии и NA для исправления мест.
Если вам не удобно с .tex, print.xtable -функция имеет множество параметров для дальнейшего форматирования.Если частичные горизонтальные линии действительно важны для вас в трех столбцах справа, я бы, вероятно, разделил их на две таблицы, а затем просто склеил их вместе по горизонтали и имел правильную линию с горизонтальной линией в каждой строке.
Можете ли вы пересмотреть свой код, чтобы генерировать данные в нужном формате? – mtoto
У меня есть данные только в том формате, который я предоставил. Мне нужно создать кадр данных или таблицу, как показано на изображении. –