三维数据到格式良好的表(kable)

时间:2018-05-07 01:21:07

标签: r latex r-markdown knitr

我有一个可能有趣的问题。如果您的数据基本上是三维的,但其中一个维度的长度只有2,那么可以在表格中很好地显示这些数据。这个问题的答案显示some examples of how to do that in latex。我认为这可能是呈现摘要统计数据的常见问题。

现在有很好的方法可以通过knitr和kableExtra格式化R中的表格,但我无法弄清楚如何在这个特殊情况下优雅地实现目标。这是一个简化的例子:

   library(dplyr)
   ms <- iris %>% 
   group_by(Species) %>%
   summarize(mean_petal_width=mean(Petal.Width),
   mean_sepal_width=mean(Sepal.Width))

   sds <- iris %>% 
   group_by(Species) %>%
   summarize(sd_petal_width=sd(Petal.Width),
   sd_sepal_width=sd(Sepal.Width))

   knitr::kable(ms)
   knitr::kable(sds)

是否有一种优雅的方法可以将这两个单独的数据帧转换为格式化为某些the answers to this question的表格?

1 个答案:

答案 0 :(得分:2)

基地R救援!基本R函数ftable是为此目的而量身定制的。我认为“f”是“扁平化”。只需将两个data.frames组合在一起,称为半长形式,xtab - 将它们组合成一个三维数组,然后显示ftable

结束游戏:

ftable( aperm(tgrp, c(3,1,2)), row.vars=c('Species', 'stat') )
#----------------                    
                    petal_width sepal_width
Species    stat                            
setosa     mean       0.2460000   3.4280000
           std_dev    0.1053856   0.3790644
versicolor mean       1.3260000   2.7700000
           std_dev    0.1977527   0.3137983
virginica  mean       2.0260000   2.9740000
           std_dev    0.2746501   0.3224966

的制备:将

首先指定相同的列名,以便它们可以是“rbound”:

library(dplyr)
    ms <- iris %>% 
    group_by(Species) %>%
    summarize(petal_width=mean(Petal.Width),
    sepal_width=mean(Sepal.Width))

    sds <- iris %>% 
    group_by(Species) %>%
    summarize(petal_width=sd(Petal.Width),
    sepal_width=sd(Sepal.Width))

grouped <- rbind( cbind(stat="mean", ms), cbind(stat="std_dev", sds) )
tgrp <- xtabs( cbind(petal_width, sepal_width) ~ stat+Species, grouped)