R xtable:将溢出的列包装到子表中

时间:2015-07-08 10:28:44

标签: r latex tabular xtable

这个问题与此处的问题有关,但我觉得那里提供的解决方案没有回答这个问题。

Split xtable ouput into sub tables

我的问题几乎相同。在R中,我有以下聚合数据表:

> agg2
       x1.Err     x1.Pct       x2.Err     x2.Pct       x3.Err     x3.Pct      x4.Err     x4.Pct        x5.Err     x5.Pct     x6.Err
1 S.noun_noun 0.13121019  S.noun_noun 0.19791667  S.noun_noun 0.16730769 S.noun_noun 0.17659574  S.noun_noun 0.18352941 S.noun_noun
2 S.verb_verb 0.12611465  S.verb_verb 0.13750000  S.verb_verb 0.14615385 S.verb_verb 0.14042553  S.verb_verb 0.13176471 S.verb_verb
3   S.det_det 0.04076433    S.det_det 0.04375000    S.det_det 0.05384615 S.prep_prep 0.04042553 S.coord_prep 0.04000000 S.prep_prep
4 S.verb_noun 0.03821656    S.prn_prn 0.03958333 S.coord_prep 0.04423077   S.prn_prn 0.03829787    S.det_det 0.04000000   S.det_det
5  S.prep_det 0.03312102 S.coord_prep 0.03750000  S.prep_prep 0.04230769   S.det_det 0.03617021   S.prep_det 0.03764706   S.prn_prn
      x6.Pct      x7.Err     x7.Pct       x8.Err     x8.Pct
1 0.16839378 S.noun_noun 0.18330309  S.noun_noun 0.18281536
2 0.14766839 S.verb_verb 0.14700544  S.verb_verb 0.13893967
3 0.04663212   S.det_det 0.03811252   S.verb_prn 0.03839122
4 0.03886010   S.prn_prn 0.03448276  S.verb_noun 0.03656307
5 0.03108808 S.verb_prep 0.03448276 S.coord_prep 0.03473492

在R溢出中显示数据框,因此绝对不适合乳胶文档。在我的例子中,我可以假设将它分成两个“子表”,每个列有8列,可以放在我的页面上。

 print(xtable(agg2, caption=My awesome caption, 
             label="tbl:myTable", digits=3))

如何强制我的“表”实际上是2个子表,每个子表有8列?换句话说,如何强制输出生成n个子表,每个子列最多k列? (n将由函数决定,而不是用户决定

注意:我不希望我的桌子侧面打印。为了防止Q& A过于复杂,我没有考虑该表跨越多个页面的可能性。

1 个答案:

答案 0 :(得分:1)

这不会进行错误检查,您必须手动确定列数,但它应该为您提供一个起点。 已编辑以生成子表,据我所知。

# define a function that takes two parameters:
# - your long data.frame 
# - the number of columns you want to print in one table
varTable <- function( agg, cols ) 
{
  tables <- ceiling( length( agg ) / cols )    # number of tables to produce
  # list, first element is number of sub-tables
  p <- list( tables )
  # produce as many table as needed with the full number of columns
  for( i in 0 : ( tables - 2 ) ) p[[ i + 2 ]] <- xtable( agg[ ( cols * i + 1):( cols * i + cols ) ] )
  # last table may have less columns and takes the caption
  p[[ i + 3 ]] <- xtable( agg[ ( cols * ( i + 1  ) + 1):( length( agg ) ) ], caption = "bla" )
  # return the list with xtable objects that can now be printed one by one
  return( p )
}

调用函数

aggs <- varTable( agg2, 6 )

并与

一起打印
for( i in 2 : ( aggs[[ 1 ]] + 1 ) ) print( aggs[[ i ]], hline.after = 0 )

这给了我 enter image description here