3-d 数据格式很好 table (kable)
3-d data to nicely formatted table (kable)
我有一个问题,概括起来可能很有趣。如果您的数据本质上是三维的,但其中一个维度的长度仅为 2,则可以在 table 中非常好地显示此数据。本题答案显示some examples of how to do that in latex。我认为这可能是呈现汇总统计数据的常见问题。
现在有非常好的方法可以通过 knitr 和 kableExtra 在 R 中格式化 tables,但我不知道如何优雅地实现这种特殊情况。这是一个简化的例子:
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)
是否有一种优雅的方法可以将这两个单独的数据帧转换为 table 格式,如某些 the answers to this question?
基地 R 来救援!基本 R 函数 ftable
是为此目的量身定制的。我相信 "f" 适合 "flatten"。只是 assemble 两个 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)
我有一个问题,概括起来可能很有趣。如果您的数据本质上是三维的,但其中一个维度的长度仅为 2,则可以在 table 中非常好地显示此数据。本题答案显示some examples of how to do that in latex。我认为这可能是呈现汇总统计数据的常见问题。
现在有非常好的方法可以通过 knitr 和 kableExtra 在 R 中格式化 tables,但我不知道如何优雅地实现这种特殊情况。这是一个简化的例子:
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)
是否有一种优雅的方法可以将这两个单独的数据帧转换为 table 格式,如某些 the answers to this question?
基地 R 来救援!基本 R 函数 ftable
是为此目的量身定制的。我相信 "f" 适合 "flatten"。只是 assemble 两个 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)