这个问题与此处的问题有关,但我觉得那里提供的解决方案没有回答这个问题。
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过于复杂,我没有考虑该表跨越多个页面的可能性。
答案 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 )
这给了我