【问题标题】:How to set "na.rm = TRUE " within R glue syntax如何在 R 胶水语法中设置“na.rm = TRUE”
【发布时间】:2020-07-29 19:13:40
【问题描述】:

我正在使用gtsummary::tbl_summary 创建一个统计汇总表。

stats_summary_table <-
  dat_wide%>%
  tbl_summary(by = mss_plate_id, 
              missing = "no",
              statistic = list(all_continuous() ~ " {mean} ± {sd}   {cv}"  ))

cv 函数来自goeveg 库。报告表显示 cv 值为 0。我想这是因为我的数据中缺少值。所以,我的问题是如何用胶水语法写cv(x, na.rm = TRUE)

编辑: 事实证明,挑战是由于精度问题而不是设置na.rm=TRUE。因此解决方案是将 cv 的位数设置为 2 或 3。 (请参阅标记的答案和带有它的 cmets)

【问题讨论】:

    标签: r gtsummary


    【解决方案1】:

    这是一个很好的问题。

    tbl_summary() 尝试做的一件困难的事情是猜测要将统计数据四舍五入到多少位数。这个例子很棘手,因为您通常希望以不同的精度级别显示均值和 CV,因为它们不在同一比例上。在下面的示例中,tbl_summary() 猜测年龄应该显示为四舍五入到最接近的整数。这是均值和 SD 的合理假设,但我们需要告诉它为 CV 显示更多数字。为此,我们使用tbl_summary(digits=) 参数。显示了年龄的三个统计数据(均值、标准差和 cv),我们将传递一个长度为 3 的向量,指示将每个统计数据四舍五入到多少位数。

    library(goeveg)
    library(gtsummary)
    
    trial %>%
      select(age, marker) %>%
      tbl_summary(
        statistic = list(all_continuous() ~ " {mean} ± {sd} [{cv}]"),
        digits = list(age ~ c(0, 0, 2))
      )
    

    希望这能回答您的问题!快乐编码!

    【讨论】:

    • 嗨@Daniel Sjoberg 感谢您及时回答我的问题......但是,我不确定它是否能回答我的问题。我的挑战是用获得均值和标准差的相同向量计算 cv。直观地说,cv = sd * 100 / mean,但我不清楚如何用胶水实现该操作。所以我用了goeveg::cv,但它只输出0,我想是因为向量中缺少值,所以我喜欢用胶水语法为cv()设置na.rm = TRUE
    • tbl_summary() 中,在将向量传递给mean、sd 或cv 之前,会排除所有缺失值,因此您无需添加na.rm = TRUE。您的 CV 舍入为 0,但不是 0。goeveg::cv() 函数计算 CV 时不乘以 100。在上面的示例中,年龄 sd / mean = 14 / 47 = 0.30。 goeveg::cv(trial$age, na.rm = TRUE) = 0.30如表所示。
    • 这是有道理的。这是因为数字而不是 na.rm。原来我问错了问题。谢谢。
    • 当我第一次看到这个问题时,我也被难住了!快乐编程!
    猜你喜欢
    • 2021-03-01
    • 2013-06-29
    • 2021-01-28
    • 2016-02-12
    • 1970-01-01
    • 2019-01-01
    • 2017-05-22
    • 1970-01-01
    • 2020-11-27
    相关资源
    最近更新 更多