在 expss 中创建一个表,显示 freq 和 cpct 但仅在 cpct 列上测试 cpct
Posted
技术标签:
【中文标题】在 expss 中创建一个表,显示 freq 和 cpct 但仅在 cpct 列上测试 cpct【英文标题】:make a table in expss that shows both freq and cpct but only tests cpct on the cpct columns 【发布时间】:2021-09-18 11:49:16 【问题描述】:将此数据集与多二分集和组一起使用:
set.seed(14)
checkall <- data.frame(ID=1:200,
group=sample(c("A", "B", "C"), size=200, replace=TRUE),
q1a=sample(c(0,1), size=200, replace=TRUE),
q1b=sample(c(0,1), size=200, replace=TRUE),
q1c=sample(c(0,1), size=200, replace=TRUE),
q1d=sample(c(0,1), size=200, replace=TRUE),
q1e=sample(c(0,1), size=200, replace=TRUE),
q1f=sample(c(0,1), size=200, replace=TRUE),
q1g=sample(c(0,1), size=200, replace=TRUE),
q1h=sample(c(0,1), size=200, replace=TRUE))
#Doctor some to be related to group
checkall$q1c[checkall$group=="A"] <- sample(c(0,1,1,1), size=sum(checkall$group=="A"), replace=TRUE)
checkall$q1e[checkall$group=="A"] <- sample(c(0,0,0,1), size=sum(checkall$group=="A"), replace=TRUE)
我想制作一个显示频率和列百分比的表格,如下所示:
library(dplyr)
if( !require(expss) ) install.packages("expss", dependencies=TRUE); library(expss)
checkall %>% tab_cells(mdset(q1a %to% q1h)) %>%
tab_cols(total(), group) %>%
tab_stat_cases(label = "freq") %>%
tab_stat_cpct(label = "col %") %>%
tab_pivot(stat_position = "inside_columns")
| | #Total | | group | | | | | |
| | freq | col % | A | | B | | C | |
| | | | freq | col % | freq | col % | freq | col % |
| ------------ | ------ | ----- | ----- | ----- | ---- | ----- | ---- | ----- |
| q1a | 101 | 50.8 | 33 | 47.8 | 36 | 51.4 | 32 | 53.3 |
| q1b | 92 | 46.2 | 34 | 49.3 | 29 | 41.4 | 29 | 48.3 |
| q1c | 111 | 55.8 | 53 | 76.8 | 30 | 42.9 | 28 | 46.7 |
| q1d | 89 | 44.7 | 35 | 50.7 | 30 | 42.9 | 24 | 40.0 |
| q1e | 100 | 50.3 | 19 | 27.5 | 43 | 61.4 | 38 | 63.3 |
| q1f | 89 | 44.7 | 34 | 49.3 | 36 | 51.4 | 19 | 31.7 |
| q1g | 97 | 48.7 | 29 | 42.0 | 33 | 47.1 | 35 | 58.3 |
| q1h | 113 | 56.8 | 40 | 58.0 | 36 | 51.4 | 37 | 61.7 |
| #Total cases | 199 | 199.0 | 69 | 69.0 | 70 | 70.0 | 60 | 60.0 |
但我想添加将 cpct 值与第一列中的值进行比较的符号。我可以在具有 just cpct 值的表上得到它,如下所示:
checkall %>% tab_cells(mdset(q1a %to% q1h)) %>%
tab_cols(total(), group) %>%
tab_stat_cpct(label = "col %")%>%
tab_pivot(stat_position = "inside_columns")%>%
significance_cpct(compare_type = "first_column")
| | #Total | group | | |
| | col % | A | B | C |
| | | col % | col % | col % |
| ------------ | ------ | ------ | ----- | ----- |
| q1a | 50.8 | 47.8 | 51.4 | 53.3 |
| q1b | 46.2 | 49.3 | 41.4 | 48.3 |
| q1c | 55.8 | 76.8 + | 42.9 | 46.7 |
| q1d | 44.7 | 50.7 | 42.9 | 40.0 |
| q1e | 50.3 | 27.5 - | 61.4 | 63.3 |
| q1f | 44.7 | 49.3 | 51.4 | 31.7 |
| q1g | 48.7 | 42.0 | 47.1 | 58.3 |
| q1h | 56.8 | 58.0 | 51.4 | 61.7 |
| #Total cases | 199 | 69 | 70 | 60 |
有没有办法将 +
和 -
符号放到 cpct 列中的第一个图形上?如果我尝试将这些行与 tab_stat_cases(label="freq")
和 significance_cpct(compare_type = "first_column")
混合,我会得到一个奇怪的表,它试图将 freq 和 cpct 列与第一列进行比较:
checkall %>% tab_cells(mdset(q1a %to% q1h)) %>%
tab_cols(total(), group) %>%
#tab_stat_cases(label = "freq") %>%
tab_stat_cpct(label = "col %")%>%
tab_pivot(stat_position = "inside_columns")%>%
significance_cpct(compare_type = "first_column")
| | #Total | | group | | | | | |
| | freq | col % | A | | B | | C | |
| | | | freq | col % | freq | col % | freq | col % |
| ------------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ |
| q1a | 101.0 | 50.8 - | 33.0 - | 47.8 - | 36.0 - | 51.4 - | 32.0 - | 53.3 - |
| q1b | 92.0 | 46.2 - | 34.0 - | 49.3 - | 29.0 - | 41.4 - | 29.0 - | 48.3 - |
| q1c | 111.0 | 55.8 - | 53.0 - | 76.8 | 30.0 - | 42.9 - | 28.0 - | 46.7 - |
| q1d | 89.0 | 44.7 - | 35.0 - | 50.7 - | 30.0 - | 42.9 - | 24.0 - | 40.0 - |
| q1e | 100.0 | 50.3 - | 19.0 - | 27.5 - | 43.0 - | 61.4 - | 38.0 - | 63.3 - |
| q1f | 89.0 | 44.7 - | 34.0 - | 49.3 - | 36.0 - | 51.4 - | 19.0 - | 31.7 - |
| q1g | 97.0 | 48.7 - | 29.0 - | 42.0 - | 33.0 - | 47.1 - | 35.0 - | 58.3 - |
| q1h | 113.0 | 56.8 - | 40.0 - | 58.0 - | 36.0 - | 51.4 - | 37.0 - | 61.7 |
| #Total cases | 199 | 199 | 69 | 69 | 70 | 70 | 60 | 60 |
我正在寻找带有+
和-
符号的顶部表,如下所示:
| | #Total | | group | | | | | |
| | freq | col % | A | | B | | C | |
| | | | freq | col % | freq | col % | freq | col % |
| ------------ | ------ | ----- | ----- | ----- | ---- | ----- | ---- | ----- |
| q1a | 101 | 50.8 | 33 | 47.8 | 36 | 51.4 | 32 | 53.3 |
| q1b | 92 | 46.2 | 34 | 49.3 | 29 | 41.4 | 29 | 48.3 |
| q1c | 111 | 55.8 | 53 | 76.8 +| 30 | 42.9 | 28 | 46.7 |
| q1d | 89 | 44.7 | 35 | 50.7 | 30 | 42.9 | 24 | 40.0 |
| q1e | 100 | 50.3 | 19 | 27.5 -| 43 | 61.4 | 38 | 63.3 |
| q1f | 89 | 44.7 | 34 | 49.3 | 36 | 51.4 | 19 | 31.7 |
| q1g | 97 | 48.7 | 29 | 42.0 | 33 | 47.1 | 35 | 58.3 |
| q1h | 113 | 56.8 | 40 | 58.0 | 36 | 51.4 | 37 | 61.7 |
| #Total cases | 199 | 199.0 | 69 | 69.0 | 70 | 70.0 | 60 | 60.0 |
【问题讨论】:
【参考方案1】:对于这种情况有一个特殊的函数 - tab_last_sig_cpct
- 它只会应用于最后的计算:
checkall %>% tab_cells(mdset(q1a %to% q1h)) %>%
tab_cols(total(), group) %>%
tab_stat_cases(label = "freq") %>%
tab_stat_cpct(label = "col %") %>%
tab_last_sig_cpct(compare_type = "first_column") %>%
tab_pivot(stat_position = "inside_columns")
【讨论】:
谢谢!这正是我所需要的!以上是关于在 expss 中创建一个表,显示 freq 和 cpct 但仅在 cpct 列上测试 cpct的主要内容,如果未能解决你的问题,请参考以下文章
在 Snappy shell 中创建的表不会显示在 JDBC 或 Pulse 中