You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

gtsummary 2.0.4版本有序因子Wilcoxon检验失效求助

解决gtsummary 2.0.4中有序因子Wilcoxon检验报错的问题

gtsummary 2.0.4版本收紧了检验函数的变量类型校验,直接指定test = "wilcox.test"时,工具会直接传入原始的有序因子变量,而wilcox.test要求输入数值型,所以触发了'x' must be numeric错误。给你两个可行的解决思路:

方法一:自定义检验函数

自己写一个适配有序因子的Wilcoxon检验函数,内部把有序因子转成数值型再执行检验,这样既保留表格里的有序因子标签,又满足检验的数值要求:

# 定义适配有序因子的Wilcoxon检验函数
wilcox_test_ordered <- function(data, variable, by, ...) {
  # 将有序因子转为数值型后执行检验
  wilcox.test(as.numeric(data[[variable]]) ~ data[[by]], data = data, ...)
}

# 使用自定义函数执行检验
testdf <- data.frame(
  out = sample(LETTERS[1:4], 100, replace = TRUE),
  group = sample(LETTERS[1:2],100, replace = TRUE)
) %>%
  mutate(
    orderedfac = factor(out, levels = LETTERS[1:4], ordered = TRUE),
    outnum = as.numeric(orderedfac)
  )

tbl_summary(
  testdf %>% select(group, orderedfac), by = group
) %>%
  add_p(test = list(orderedfac = wilcox_test_ordered))

方法二:提前转换变量并保留标签

先把有序因子转成数值型,然后在tbl_summary里把数值型变量的标签和显示值映射回原有序因子,这样表格展示和检验逻辑都能满足:

testdf <- data.frame(
  out = sample(LETTERS[1:4], 100, replace = TRUE),
  group = sample(LETTERS[1:2],100, replace = TRUE)
) %>%
  mutate(
    orderedfac = factor(out, levels = LETTERS[1:4], ordered = TRUE),
    orderedfac_num = as.numeric(orderedfac) # 新增数值型变量
  )

tbl_summary(
  testdf %>% select(group, orderedfac_num), by = group,
  # 把数值型变量的标签设为原有序因子名称
  label = list(orderedfac_num = "orderedfac"),
  # 把数值映射回原有序因子的标签显示
  value = list(orderedfac_num = ~factor(.x, levels = 1:4, labels = LETTERS[1:4]))
) %>%
  add_p(test = list(orderedfac_num = "wilcox.test"))

两种方法里,方法一更简洁,不需要修改原始数据结构,推荐优先使用。

内容的提问来源于stack exchange,提问作者Dries

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 14:46:06