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

tidycmprsk包问题:修改水平标签后曲线及风险表顺序无法调整

解决tidycmprsk重命名因子水平后曲线/风险表顺序被打乱的问题

我非常喜欢tidycmprsk包,但遇到了一个无法通过常规排序解决的问题:当重命名变量水平标签后,无法调整曲线的显示顺序。我原本有一个编码为1、2、3的变量,需要重命名以在风险表中显示正确标签,但重命名后它们会按字母顺序排列,无论尝试何种方法都无法更改顺序。示例代码如下:

library(tidycmprsk)

trial <- trial
label_levels <- c("Beta", "Alpha")

trial$trt <- factor(trial$trt,
                    levels = c("Drug A", "Drug B"),
                    labels = label_levels)

tidycmprsk::cuminc(Surv(ttdeath, death_cr) ~ trt, trial) %>%
  ggcuminc(outcome = "death from cancer") +
  add_confidence_interval() +
  add_risktable() +
  scale_ggsurvfit()

需求:要么覆盖风险表(add_risktable())中的水平标签,要么直接在数据框中修改水平标签并保留自定义顺序。


方案1:保留因子自定义顺序,强制绘图时遵循该顺序

你已经正确设置了因子的水平顺序(Beta为第一水平,Alpha为第二水平),但scale_ggsurvfit()可能默认按字母顺序重排离散刻度。可以通过手动指定刻度参数,强制使用因子的原始水平顺序:

library(tidycmprsk)
library(ggplot2)

trial <- trial
label_levels <- c("Beta", "Alpha")

# 保持因子水平顺序不变
trial$trt <- factor(trial$trt,
                    levels = c("Drug A", "Drug B"),
                    labels = label_levels)

tidycmprsk::cuminc(Surv(ttdeath, death_cr) ~ trt, trial) %>%
  ggcuminc(outcome = "death from cancer") +
  add_confidence_interval() +
  add_risktable() +
  # 强制使用因子的水平顺序,覆盖字母排序
  scale_color_discrete(breaks = levels(trial$trt)) +
  scale_fill_discrete(breaks = levels(trial$trt)) +
  scale_ggsurvfit()

这样曲线、图例和风险表的顺序都会严格遵循你设置的Beta在前、Alpha在后的规则。

方案2:直接自定义风险表标签,不依赖因子水平

如果不想修改原始数据的因子设置,可通过add_risktable()的labels参数直接指定风险表行标签,同时配合刻度调整曲线顺序:

library(tidycmprsk)
library(ggplot2)

trial <- trial
# 保留原始因子水平设置
trial$trt <- factor(trial$trt, levels = c("Drug A", "Drug B"))

tidycmprsk::cuminc(Surv(ttdeath, death_cr) ~ trt, trial) %>%
  ggcuminc(outcome = "death from cancer") +
  add_confidence_interval() +
  # 自定义风险表的行标签,顺序对应因子水平
  add_risktable(labels = c("Beta", "Alpha")) +
  # 指定曲线和图例的顺序及显示标签
  scale_color_discrete(breaks = c("Drug A", "Drug B"), labels = c("Beta", "Alpha")) +
  scale_fill_discrete(breaks = c("Drug A", "Drug B"), labels = c("Beta", "Alpha")) +
  scale_ggsurvfit()

这种方式无需修改原始数据,直接在绘图层完成自定义,灵活性更高。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 14:55:19