从R中的ftable对象创建一个乳胶表

时间:2012-03-11 19:57:38

标签: r latex xtable knitr

在我提出问题之前,让我先创建一些数据。

 my.data <- data.frame(A = sample(seq(1,100,by=5),10,replace=TRUE),W = rnorm(10),X =sample(1:10),Y = sample(c("yes", "no"), 10, replace = TRUE),Z=sample(c('a','b','c','d'),10,replace=TRUE))

attach(my.data)

my.d <- xtabs(W~Z+Y+A);my.d
table.data <- ftable(my.d)

result1 <- round(table.data,2)

result1看起来像..

      A     6    11    16    26    71    76    86    91
Z Y                                                    
a no     0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
 yes    0.00  0.56  0.00  0.00  0.00  0.79  0.00  0.01

b no     0.61  0.00 -0.22  0.14  0.00  0.00 -0.08  1.71
  yes    0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00

c no     0.00  0.00  0.00  0.00 -0.08  0.00  0.00  0.00
  yes    0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00

d no     0.00  0.00  0.00  0.00  1.00  0.00  0.00  0.00
  yes    0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00

我实际上正在使用knitr包写一篇文章。     有没有办法将result1转换为乳胶表 我的* .rnw文件被编译时自动?

我尝试使用xtable但遇到以下错误......

Error in UseMethod("xtable") :   no applicable method for 'xtable' applied to an object of class "ftable"

谢谢@DWin和@Yihui。除了latex()之外,我还使用了

中所述的xtable
print(xtable(ftable2data.frame(result1)))

要删除不必要的行名,我执行了以下操作

print(xtable(ftable2data.frame(result1)),include.rownames=FALSE)

5 个答案:

答案 0 :(得分:6)

作为替代方案,memisc为ftable对象提供了toLatex方法。

library(memisc)
toLatex(result1)

答案 1 :(得分:4)

方法1:

require(MIfuns)
require(Hmisc)
latex(ftable2data.frame(result1))

答案 2 :(得分:4)

您可以使用包xtable

library(xtable)
mytable=ftable(mydata)
print(
  xtable(format(mytable)),file="~/Desktop/mytable.tex"
)

我不知道它与其他选项的比较。

答案 3 :(得分:1)

建立用户2030503的答案,

# install.packages('simsalapar')
library(simsalapar)
utils::toLatex(result1)

函数toLatex是S3泛型,因此在给定ftable对象时传递给simsalapar:::toLatex.ftable()。或者,你可以simsalapar:::toLatex.ftable(result1)

完成后,我需要在\usepackage{booktabs}使用toLatex.ftable的情况下将\toprule包含在乳胶前言中。或者,您可以通过booktabs=FALSE

它看起来像toLatex.ftable修剪掉尾随零。要解决这个问题,这就是我所做的(请参阅format()的{​​{3}}的答案):

result1[1:nrow(result1),1:ncol(result1)] %<>% as.numeric %>% format(nsmall=2,digits=3)

这会将ftable的矩阵转换为字符矩阵,但toLatex.ftable仍然有效。

我还发现它对\usepackage{pdflscape}很有帮助,并将我的表格包裹在\begin{landscape}\end{landscape}中,因为这些列联表可能非常广泛。

答案 4 :(得分:0)

使用simsalapar包提供的<input type='text' class="form-control" name='prc'>功能。

toLatex()