如何使用 compareGroups 包显示中位数?

How to display median with compareGroups package?

我有这个代码:

data("ToothGrowth")
res<-compareGroups(supp~len, data = ToothGrowth)
restab<-createTable(res, show.p.overall = FALSE, extra.labels=c("","",""))
print(restab, which.table = "descr")

它给了我这个输出(带有均值和标准差):

--------Summary descriptives table by 'supp'---------

______________________________________ 
                   OJ          VC      
                  N=30        N=30     
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ 
len, Mean (SD) 20.7 (6.61) 17.0 (8.27) 
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ 

问题:如何让它也输出中位数?我需要 html 平均中位数和标准差格式的分组摘要。

您会考虑使用 dplyr 而不是 compareGroups 的解决方案吗?您可以添加任何您想要的统计信息。

library(dplyr)

data("ToothGrowth")

df<-ToothGrowth %>%
  group_by(supp) %>%
  summarize(mean = mean(len), 
            median = median(len),
            sd = sd(len),
            count = n())

df

# # A tibble: 2 x 5
# supp   mean median    sd count
# <fct> <dbl>  <dbl> <dbl> <int>
# 1 OJ     20.7   22.7  6.61    30
# 2 VC     17.0   16.5  8.27    30

您可以使用包 knitr 将结果(或任何数据帧)格式化为 HTML table。您可以在 kable 帮助文件中找到格式化选项;附加包 kableExtra 让您做更多事情。

knitr::kable(df, format = "html", digits = 2)

# <table>
#   <thead>
#   <tr>
#   <th style="text-align:left;"> supp </th>
#   <th style="text-align:right;"> mean </th>
#   <th style="text-align:right;"> median </th>
#   <th style="text-align:right;"> sd </th>
#   <th style="text-align:right;"> count </th>
#   </tr>
#   </thead>
#   <tbody>
#   <tr>
#   <td style="text-align:left;"> OJ </td>
#   <td style="text-align:right;"> 20.66333 </td>
#   <td style="text-align:right;"> 22.7 </td>
#   <td style="text-align:right;"> 6.605561 </td>
#   <td style="text-align:right;"> 30 </td>
#   </tr>
#   <tr>
#   <td style="text-align:left;"> VC </td>
#   <td style="text-align:right;"> 16.96333 </td>
#   <td style="text-align:right;"> 16.5 </td>
#   <td style="text-align:right;"> 8.266029 </td>
#   <td style="text-align:right;"> 30 </td>
#   </tr>
#   </tbody>
#   </table>
#   > kable(df, format = "html", digits = 2)
# <table>
#   <thead>
#   <tr>
#   <th style="text-align:left;"> supp </th>
#   <th style="text-align:right;"> mean </th>
#   <th style="text-align:right;"> median </th>
#   <th style="text-align:right;"> sd </th>
#   <th style="text-align:right;"> count </th>
#   </tr>
#   </thead>
#   <tbody>
#   <tr>
#   <td style="text-align:left;"> OJ </td>
#   <td style="text-align:right;"> 20.66 </td>
#   <td style="text-align:right;"> 22.7 </td>
#   <td style="text-align:right;"> 6.61 </td>
#   <td style="text-align:right;"> 30 </td>
#   </tr>
#   <tr>
#   <td style="text-align:left;"> VC </td>
#   <td style="text-align:right;"> 16.96 </td>
#   <td style="text-align:right;"> 16.5 </td>
#   <td style="text-align:right;"> 8.27 </td>
#   <td style="text-align:right;"> 30 </td>
#   </tr>
#   </tbody>
#   </table>