В конечном итоге звучит так, будто вы работаете с фреймом данных, представляющим результаты нескольких исследований. Вы хотите написать функцию, которая будет принимать в качестве входных данных идентификатор исследования и группу пациентов в этом исследовании, и вы хотите, чтобы функция строила кривую выживаемости для пациентов в указанной группе, а не нет.
Поскольку только ваша функция необходимо обработать одну указанную группу b
, мне кажется, проще всего создать одну переменную, указывающую членство в этой группе или нет, вместо того, чтобы перебирать все переменные, как вы предлагаете:
library(survival)
library(survminer)
SurvA <- function(dat, a, b) {
dat <- dat[dat$Study == a,]
dat$Group1Val <- ifelse(dat$Group1 == b, b, paste("Not", b))
fit <- survfit(Surv(Time, Censored)~Group1Val, data=dat)
print(ggsurvplot(fit, data=dat, pval=TRUE,
title=paste("Study", a, "Survival Plot for Group", b),
xlab="Time (Days)",
ggtheme=theme(plot.title=element_text(hjust=0.5))))
}
SurvA(dat, 1, 1)
Результат :
Данные:
set.seed(144)
s1g1S <- rexp(100, 1) ; s1g1C <- rexp(100, 0.5) ; s1g2S <- rexp(100, 1.2) ; s1g2C <- rexp(100, 0.5)
s2g1S <- rexp(100, 1) ; s2g1C <- rexp(100, 0.5) ; s2g2S <- rexp(100, 1.2) ; s2g2C <- rexp(100, 0.5)
dat <- data.frame(UniqueID=seq_len(200),
Time=c(pmin(s1g1S, s1g1C), pmin(s1g2S, s1g2C), pmin(s2g1S, s2g1C), pmin(s2g2S, s2g2C)),
Censored=as.numeric(c(s1g1S, s1g2S, s2g1S, s2g2S) > c(s1g1C, s1g2C, s2g1C, s2g2C)),
Group1=rep(c(1, 2, 1, 2), each=100), Study=rep(1:2, each=200))