在 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 中

如何使用 expss 创建两个标题表

如何在html中创建一个复选框,以使用jQuery隐藏/显示表中的多个列

在存储过程中创建临时表

排序 expss 输出表

如何在ireport表中创建条形图?