R和乳胶:列出排名数据框架

时间:2015-07-08 08:56:00

标签: r latex tabular

我生成了一个数据框,通过融化原始数据框并应用排名函数,可以为我提供前n个变量及其相关值。我的排名数据框如下所示:

   SysID     variable      value   Class1   Class2
1      1  S.noun_noun 0.13121019     Open     Open
2      1  S.verb_verb 0.12611465     Open     Open
3      1    S.det_det 0.04076433   Closed   Closed
4      1  S.verb_noun 0.03821656     Open     Open
5      1   S.prep_det 0.03312102   Closed   Closed
6      2  S.noun_noun 0.19791667     Open     Open
7      2  S.verb_verb 0.13750000     Open     Open
8      2    S.det_det 0.04375000   Closed   Closed
9      2    S.prn_prn 0.03958333   Closed   Closed
10     2 S.coord_prep 0.03750000   Closed   Closed
11     3  S.noun_noun 0.16730769     Open     Open
12     3  S.verb_verb 0.14615385     Open     Open
13     3    S.det_det 0.05384615   Closed   Closed
14     3 S.coord_prep 0.04423077   Closed   Closed
15     3  S.prep_prep 0.04230769   Closed   Closed

现在我尝试将其打印到LaTeX文档中。我希望它看起来像这样:

    1                   2                    …
    variable    value   variable    value   
1    S.noun_noun    0.13121019  S.noun_noun 0.19791667  
2    S.verb_verb    0.12611465  S.verb_verb 0.1375  
3    S.det_det  0.04076433  S.det_det   0.04375 
4    S.verb_noun    0.03821656  S.prn_prn   0.03958333  
5    S.prep_det 0.03312102  S.coord_prep    0.0375  

我发现tabular包中的tables可能会执行此操作,但我无法确定要使用的正确公式。有人可以推荐一个表格式,可以格式化这种格式的数据,或者使用另一个包/函数吗?谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

这是一种非常手动的方式,因此,如果您的SysID由多个级别组成,这可能看起来不太可行(在编辑之前,我注意到您的原始SysID达到了8级) 。这假设您的数据位于名为DF的对象中,并进行了适当更改:

g<-split(DF[,2:3], DF$SysID)
#here you merge them side by side
#note that the variable names are not right
#add a new row with SysID
ggg<- rbind.data.frame(c(g[[1]],g[[2]],g[[3]]))
gggnames <- c("variable 1", "value 1", "variable 2", "value 2", "variable 3", "value 3")
colnames(ggg) <- gggnames
stargazer(ggg, summary=FALSE)

这将输出一个LaTeX表供您复制和粘贴。

@docendo评论中提供了这个库的单行解决方案:

 stargazer( do.call(cbind, split(DF[2:3], DF$SysID)), summary=FALSE)

同样,DF是数据的对象。

如果表太长,xtable解决方案也可以运行。再次,从评论中取出并假设原始的SysID,这表明后处理(从第一个表中删除底部,从第二个表中删除顶部是最可能的解决方案,将其放在一个表中):

gggg <- do.call(cbind, split(DF[2:3], DF$SysID))
xtable(gggg[,1:8])  
xtable(gggg[,9:16])