在R中的嵌套变量中具有行百分比的expss表
Posted
技术标签:
【中文标题】在R中的嵌套变量中具有行百分比的expss表【英文标题】:expss table with row percentage within nested variables in R 【发布时间】:2020-01-28 11:52:33 【问题描述】:当使用 R 中的 expss 包创建表时,如何在嵌套变量中计算 row_percentages?在下面的示例中,我希望在每个时间段内计算行百分比。因此,我希望每个时间段(2015-2016 和 2017-2018)内的行百分比总和为 100%。但现在,百分比是在整行上计算的。
library(expss)
data(mtcars)
mtcars$period <- "2015-2016"
mtcars <- rbind(mtcars, mtcars)
mtcars$period[33:64] <- "2017-2018"
mtcars = apply_labels(mtcars,
cyl = "Number of cylinders",
am = "Transmission",
am = c("Automatic" = 0,
"Manual"=1),
period = "Measurement period"
)
mtcars %>%
tab_cells(cyl) %>%
tab_cols(period %nest% am) %>%
tab_stat_rpct(label = "row_perc") %>%
tab_pivot()
由reprex package (v0.3.0) 于 2019 年 9 月 28 日创建
| | | | Measurement period | | | |
| | | | 2015-2016 | | 2017-2018 | |
| | | | Transmission | | Transmission | |
| | | | Automatic | Manual | Automatic | Manual |
| ------------------- | ------------ | -------- | ------------------ | ------ | ------------ | ------ |
| Number of cylinders | 4 | row_perc | 13.6 | 36.4 | 13.6 | 36.4 |
| | 6 | row_perc | 28.6 | 21.4 | 28.6 | 21.4 |
| | 8 | row_perc | 42.9 | 7.1 | 42.9 | 7.1 |
| | #Total cases | row_perc | 19.0 | 13.0 | 19.0 | 13.0 |
【问题讨论】:
【参考方案1】:我相信这就是你所追求的:
library(expss)
data(mtcars)
mtcars$period <- "2015-2016"
mtcars <- rbind(mtcars, mtcars)
mtcars$period[33:64] <- "2017-2018"
mtcars = apply_labels(mtcars,
cyl = "Number of cylinders",
am = "Transmission",
am = c("Automatic" = 0,
"Manual"=1),
period = "Measurement period"
)
mtcars %>%
tab_cells(cyl) %>%
tab_cols(period %nest% am ) %>%
tab_subgroup(period =="2015-2016") %>%
tab_stat_rpct(label = "row_perc") %>%
tab_subgroup(period =="2017-2018") %>%
tab_stat_rpct(label = "row_perc") %>%
tab_pivot(stat_position = "inside_rows")
请注意tab_subgroup()
的使用,它决定了我们要计算百分比的年份,以及stat_position = "inside_rows"
,它决定了我们要将计算出的输出放在最终表格中的哪个位置。
输出:
| | | | Measurement period | | | |
| | | | 2015-2016 | | 2017-2018 | |
| | | | Transmission | | Transmission | |
| | | | Automatic | Manual | Automatic | Manual |
| ------------------- | ------------ | -------- | ------------------ | ------ | ------------ | ------ |
| Number of cylinders | 4 | row_perc | 27.3 | 72.7 | | |
| | | | | | 27.3 | 72.7 |
| | 6 | row_perc | 57.1 | 42.9 | | |
| | | | | | 57.1 | 42.9 |
| | 8 | row_perc | 85.7 | 14.3 | | |
| | | | | | 85.7 | 14.3 |
| | #Total cases | row_perc | 19.0 | 13.0 | | |
| | | | | | 19.0 | 13.0 |
编辑:
如果我们不想要嵌套行(即多行),我们不需要%nest%
。在这种情况下,代码的最后部分应该修改如下:
mtcars %>%
tab_cells(cyl) %>%
tab_cols(period,am) %>%
tab_subgroup(period ==c("2015-2016")) %>%
tab_stat_rpct(label = "row_perc") %>%
tab_subgroup(period ==c("2017-2018")) %>%
tab_stat_rpct(label = "row_perc") %>%
tab_pivot(stat_position = "outside_columns")
输出:
| | | Measurement period | Transmission | | |
| | | 2015-2016 | Automatic | Manual | Automatic |
| | | row_perc | row_perc | row_perc | row_perc |
| ------------------- | ------------ | ------------------ | ------------ | -------- | --------- |
| Number of cylinders | 4 | 100 | 27.3 | 72.7 | 27.3 |
| | 6 | 100 | 57.1 | 42.9 | 57.1 |
| | 8 | 100 | 85.7 | 14.3 | 85.7 |
| | #Total cases | 32 | 19.0 | 13.0 | 19.0 |
| Measurement period |
Manual | 2017-2018 |
row_perc | row_perc |
-------- | ------------------ |
72.7 | 100 |
42.9 | 100 |
14.3 | 100 |
13.0 | 32 |
【讨论】:
感谢维塔利!行百分比确实是根据需要计算的,但是作为副作用,表中的行数增加了一倍。 2017-2018 年的数据比 2015-2016 年的数据低一排。目前没什么大不了的,但是随着时间的推移,这可能会导致很多行和一个不太好看的表格。关于如何解决这个问题的任何想法? 我会调查的,@Steffen @Steffen 我进行了编辑。请让我知道您是否想要。以上是关于在R中的嵌套变量中具有行百分比的expss表的主要内容,如果未能解决你的问题,请参考以下文章
R 具有两个因子变量的堆积百分比条形图 - 如何在图中标记百分比,而不计算 NA?
如何创建具有 1 个自变量和 3 个因变量的计数和百分比表和折线图
如何防止 R Expss 在输出数据框中将变量名称与行标签混合?