2013-04-25 76 views
2

結合在數據幀矩陣我試圖通過因子來計算位數和使用xtable打印出所得到的聚合乳膠格式。不幸的是,我收到了一些不可靠的行爲。一個乾淨的解決方案,將不勝感激。通過骨料

要創建一個例子:

tm <- data.frame(f=c("a","b","c"),v=runif(30)) 
tm$f <- factor(tm$f) 
agv <- aggregate(v~f,tm, quantile) 

輸出agv不受xtable接受:

xtable(agv) 

給出

錯誤的cols [I + POS] < - do.call(「formatC」,curFormatArgs): 數項替換的不是replacem的倍數耳鼻喉科長度

即使print(agv)

f  v.0%  v.25%  v.50%  v.75%  v.100% 
1 1 0.002970944 0.253247687 0.571891610 0.766606825 0.986142807 
2 2 0.002129951 0.328739086 0.558132094 0.799115979 0.991067470 
3 3 0.011059184 0.285322522 0.496035672 0.770908599 0.994420787 

因爲很顯然dim(agv)實際上是[1] 3 2

所以,我想:

cbind(featureName=agv$f, agv$v) 

導致性格因素轉換爲數值因爲某些原因。

一些試驗和錯誤之後,這是我上解決了解決方案:

cbind(f=as.character(agv$f), data.frame(agv$v,check.names=F)) 

其中,給我的結果,我想在xtable

\begin{table}[ht] 
\centering 
\begin{tabular}{rlrrrrr} 
    \hline 
& f & 0\% & 25\% & 50\% & 75\% & 100\% \\ 
    \hline 
1 & a & 0.00 & 0.25 & 0.48 & 0.75 & 0.99 \\ 
    2 & b & 0.00 & 0.28 & 0.46 & 0.74 & 1.00 \\ 
    3 & c & 0.02 & 0.21 & 0.44 & 0.63 & 1.00 \\ 
    \hline 
\end{tabular} 
\end{table} 

不管怎麼說,我只是好奇是否有涉及更少線路的更清潔的解決方案。

回答

3

稍微更直接的方法(雖然在概念上比你已經做沒有太大的不同)可能是使用do.call(data.frame, ...)。以下對我有用。

xtable(do.call(data.frame, c(agv, check.names = FALSE))) 

對於我來說,它返回:

> xtable(do.call(data.frame, c(agv, check.names = FALSE))) 
% latex table generated in R 3.0.0 by xtable 1.7-1 package 
% Thu Apr 25 11:10:26 2013 
\begin{table}[ht] 
\centering 
\begin{tabular}{rlrrrrr} 
    \hline 
& f & v.0\% & v.25\% & v.50\% & v.75\% & v.100\% \\ 
    \hline 
1 & a & 0.06 & 0.27 & 0.38 & 0.64 & 0.94 \\ 
    2 & b & 0.20 & 0.38 & 0.52 & 0.70 & 0.87 \\ 
    3 & c & 0.01 & 0.22 & 0.60 & 0.87 & 0.99 \\ 
    \hline 
\end{tabular} 
\end{table} 

xtable還與data.table S,所以你也可以這樣做以下:

library(data.table) 

DT <- data.table(tm, key = "f") 
xtable(DT[, as.list(quantile(v)), by = key(DT)]) 

這裏,DT[, as.list(quantile(v)), by = key(DT)]會給你同樣的結果你的「AGV」對象。

+0

+1不錯的使用data.table – 2013-04-25 06:00:56