2016-08-12 67 views
4

我想使用knitr和(理想)stargazer自動生成帶變量組標題的描述表。由於我需要加權描述,因此我不使用stargazer內置的彙總函數,而是生成一個包含統計信息的數據框,並使用參數summary=FALSE來打印數據框。stargazer彙總表中的變量組標題

問題1:將變量和標題作爲行並將彙總統計信息作爲列的df不起作用,因爲觀星器將標題行上的NA轉換爲打破編織過程的$$

問題2:作爲解決方法,我生成了一個數據框,其中包含變量和標題作爲列,將彙總統計信息作爲行並使用flip=TRUE參數使行和列在StarGazer輸出中翻轉。雖然這允許我爲變量的標題和數字向量具有空的字符向量,但stargazer不會在數學模式中輸出數字向量,但(似乎)將它們視爲字符。

例子:

# create example df 
df <- data.frame(heading=c(" "," "," "),var1=c(1,2,3),var2=c(4,5,6)) 
df$heading <- as.character(df$heading) 

# output using stargazer 
stargazer(df, summary = FALSE, flip = TRUE) 

% Table created by stargazer v.5.2 by Marek Hlavac, Harvard University. E-mail: hlavac at fas.harvard.edu 
% Date and time: Fri, Aug 12, 2016 - 10:39:01 
\begin{table}[!htbp] \centering 
    \caption{} 
    \label{} 
\begin{tabular}{@{\extracolsep{5pt}} cccc} 
\\[-1.8ex]\hline 
\hline \\[-1.8ex] 
& 1 & 2 & 3 \\ 
\hline \\[-1.8ex] 
heading & & & \\ 
var1 & 1 & 2 & 3 \\ 
var2 & 4 & 5 & 6 \\ 
\hline \\[-1.8ex] 
\end{tabular} 
\end{table} 

問:如何添加在描述表標題(空行),仍然可以得到數學模式輸出變量的統計數據?

+0

占星簡單地產生惡劣的乳膠是uncustomisable:特別是,有沒有告訴占星做你想做什麼的方式,你需要修改結果LaTeX代碼。不要使用這個包 - 使用另一個表生成器,例如Pander。 –

回答

2

正如Konrad Rudolph所述,stargazer可能無法做到這一點。下面的解決方案使用xtable代替:

\documentclass{article} 
\usepackage{array} 

\begin{document} 

<<results = "asis", echo = FALSE>>= 
library(xtable) 

group1 <- data.frame(
    name = c("v1", "v2"), 
    mean = 1:2, min = 3:4, max = 5:6, 
    stringsAsFactors = FALSE) 
group2 <- data.frame(
    name = c("v3", "v4"), 
    mean = -(1:2), min = -(3:4), max = -(5:6), 
    stringsAsFactors = FALSE) 

dat <- rbind(
    c("\\textbf{Group 1}", rep(NA, ncol(group1) - 1)), 
    group1, 
    c("\\textbf{Group 2}", rep(NA, ncol(group1) - 1)), 
    group2) 

colnames(dat) <- sprintf("\\multicolumn{1}{c}{%s}", colnames(dat)) 

print.xtable(
    xtable(dat, 
     caption = "Summary of Groups 1 and 2.", 
     align = c("l", "l", rep(">{$}r<{$}", 3))), 
    include.rownames = FALSE, 
    sanitize.text.function = identity, 
    sanitize.colnames.function = identity) 
@ 
\end{document} 

這個概念很簡單,但也有一些怪癖要考慮到:

  • 首先,我生成的樣本數據,假定2組有2個變量每個變量有3個描述。
  • 當組中有組時,只需插入標題行,將空列設置爲NA。不要忘記在字符串中使用LaTeX時加倍反斜槓。 (如果標題太寬,則使用\multicolumn。)
  • 由於第2至第4列將以數學模式設置,因此我們必須確保列名將作爲普通文本打印。 「寬度爲1的多列」允許僅爲一個單元更改列類型,請參閱here
  • 使用參數xtablealign指定列類型。在數學模式下,我們需要一個正常的左對齊列和三個右對齊列。要強制數學模式,請使用>{$}r<{$},請參閱here。 (還有一個額外的l將被忽略 - 這是我們隱藏的行名稱。)
  • 因爲我們在數據中有LaTeX標記,所以我們需要關閉xtable的清理程序。因此,請將sanitize.text.functionsanitize.colnames.function設置爲identity

結果:

Result

+1

我喜歡示例值如何不可能是真實的^^ – AlexR

+0

@AlexR是啊...我先編制數字,然後決定在其上放置(任意)標籤。不那麼聰明。 ;-) –

+0

好吧,它讓我微笑至少:-) – AlexR