【问题标题】:Creating a function that outputs a series of two-by-two tables创建一个输出一系列 2×2 表的函数
【发布时间】:2021-06-11 15:07:07
【问题描述】:

使用 gtsummary 包,我想创建一个函数,让我使用大量变量输出一系列 2×2 表。我有下面的函数,当使用虚拟数据运行它时,该函数会引发以下错误。有人可以帮忙吗?

Note: Using an external vector in selections is ambiguous.
ℹ Use `all_of(y)` instead of `y` to silence this message.
ℹ See <https://tidyselect.r-lib.org/reference/faq-external-vector.html>.
This message is displayed once per session.

这是虚拟数据

# download pacman package if not installed, otherwise load it
if(!require(pacman)) install.packages(pacman)

# loads relevant packages using the pacman package
pacman::p_load(gtsummary) # for the twobytwo table
     

dummy <-data.frame(city = sample(c("SF", "AR", "NYC","MN"),13000,replace = TRUE),
                       city_2 = sample(c("SF", "AR", "NYC","MN"),13000,replace = TRUE),
                       year = sample(as.factor(c(1990, 2000, 1999, 1989)),13000,replace = TRUE)
    )

这是函数

crosstab_func <- function(data, x, y) {
  
  out <- gtsummary::tbl_cross(data,
              row = x, 
              col = y) 
    
  return(out)
}

...这是使用组合函数的函数调用。

result <- combn(names(dummy), 2, function(x) 
                crosstab_func(dummy, x[1], x[2]), simplify = FALSE)

我正在寻找的结果之一是...

【问题讨论】:

  • 您显示正在加载data.table 但从未使用它,并且您未显示dplyr(或magrittr)但您正在使用%&gt;%。这将有助于查看您的问题真正需要哪些软件包,因为它目前不一致。最后,“它似乎不起作用”也不清楚:如果有警告或错误,包括它们;如果输出不正确,请显示一些输出以及您认为错误的原因。请使用您的样本数据,至少提供您期望的输出组件之一。
  • 感谢您发现这一点。希望现在问题更详细,可以回答
  • 我不在电脑前编写完整的解决方案。如果您只需要删除有关外部向量选择的注释,请在 tbl_cross() 中的 x 和 y 参数周围添加 all_of()
  • @DanielD.Sjoberg 就在眼前!!那是我问题的 2/2,我的朋友,你连胜了!谢谢

标签: r function gtsummary


【解决方案1】:

这在基础 R 中可能更简单。

set.seed(42) # for reproducibility
dummy <- data.frame(city = sample(c("SF", "AR", "NYC","MN"), 13000, replace = TRUE),
                    city_2 = sample(c("SF", "AR", "NYC","MN"), 13000, replace = TRUE),
                    year = sample(as.factor(c(1990, 2000, 1999, 1989)), 13000, replace = TRUE)
     )
head(dummy)
#   city city_2 year
# 1   SF     MN 1990
# 2   SF    NYC 2000
# 3   SF     SF 1999
# 4   SF     MN 1999
# 5   AR     MN 2000
# 6   MN    NYC 1990

从这里开始:

combn(names(dummy), 2, function(nms) {
  frm <- paste("~", paste(nms, collapse = " + "), collapse = "")
  addmargins(             # adds the 'Sum' columns/rows
    xtabs(frm, data = dummy)
  )
}, simplify = FALSE)
# [[1]]
#      city_2
# city     AR    MN   NYC    SF   Sum
#   AR    798   791   823   833  3245
#   MN    806   803   841   782  3232
#   NYC   812   776   785   829  3202
#   SF    785   834   846   856  3321
#   Sum  3201  3204  3295  3300 13000
# [[2]]
#      year
# city   1989  1990  1999  2000   Sum
#   AR    831   810   833   771  3245
#   MN    777   870   818   767  3232
#   NYC   779   796   831   796  3202
#   SF    817   826   850   828  3321
#   Sum  3204  3302  3332  3162 13000
# [[3]]
#       year
# city_2  1989  1990  1999  2000   Sum
#    AR    807   797   819   778  3201
#    MN    803   816   820   765  3204
#    NYC   842   839   821   793  3295
#    SF    752   850   872   826  3300
#    Sum  3204  3302  3332  3162 13000

【讨论】:

    猜你喜欢
    • 2017-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-07
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    相关资源
    最近更新 更多