[R] survSplit with data.frame containing a Surv object

Heinz Tuechler tuechler at gmx.at
Mon Jul 13 23:12:27 CEST 2009


At 20:18 13.07.2009, Charles C. Berry wrote:
>On Mon, 13 Jul 2009, Heinz Tuechler wrote:
>
>>Dear All,
>>
>>since years I am struggling with Surv objects in data.frames. The 
>>following seems to have to do with it.
>>See below the modified example from the help page of survSplit. The 
>>original works, as expected. If, however, a Surv object is added to 
>>the data.frame, each record gets doubled.
>>Is there some solution other than avoiding Surv objects in data.frames?
>
>I think you can modify survSplit so that it will properly handle Surv objects.
>
>Change this line:
>
>         newdata <- lapply(data, rep, ntimes + 1)
>
>to this:
>
>         newdata <- lapply(data,
>                 function(x) {
>                         x <- as.matrix(x)
>                         x[rep(1:nrow(x), ntimes + 1),]
>                                 })
>
>or something similar that results Surv objects being rep()'ed 
>rowwise rather than elementwise and returned as objects of the right 
>dimension (rather than as a vector).
>
>Caveat: This works in the example you give, but I've not tested this 
>extensively.
>
>HTH,
>
>Chuck
>
>
>
>>
>>Thanks,
>>Heinz
>>
>>
>>require(survival)
>>
>>## from the help page
>>aml3<-survSplit(aml,cut=c(5,10,50),end="time",start="start",
>>       event="status",episode="i")
>>
>>summary(aml)
>>summary(aml3)
>>
>>coxph(Surv(time,status)~x,data=aml)
>>## the same
>>coxph(Surv(start,time,status)~x,data=aml3)
>>
>>## added to show doubling of records
>>aml.so <- aml
>>aml.so$surv.object <- with(aml, Surv(time, status))
>>
>>aml3.so <- survSplit(aml.so ,cut=c(5,10,50),end="time",start="start",
>>                     event="status",episode="i")
>>summary(aml3.so)
>>
>>sessionInfo('survival')
>>R version 2.9.1 Patched (2009-07-07 r48910)
>>i386-pc-mingw32
>>
>>locale:
>>LC_COLLATE=German_Switzerland.1252;LC_CTYPE=German_Switzerland.1252;LC_MONETARY=German_Switzerland.1252;LC_NUMERIC=C;LC_TIME=German_Switzerland.1252
>>
>>attached base packages:
>>character(0)
>>
>>other attached packages:
>>[1] survival_2.35-4
>>
>>loaded via a namespace (and not attached):
>>[1] base_2.9.1      graphics_2.9.1  grDevices_2.9.1 methods_2.9.1
>>[5] splines_2.9.1   stats_2.9.1     utils_2.9.1
>>
>>______________________________________________
>>R-help at r-project.org mailing list
>>https://stat.ethz.ch/mailman/listinfo/r-help
>>PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>>and provide commented, minimal, self-contained, reproducible code.
>
>Charles C. Berry                            (858) 534-2098
>                                             Dept of 
> Family/Preventive Medicine
>E mailto:cberry at tajo.ucsd.edu               UC San Diego
>http://famprevmed.ucsd.edu/faculty/cberry/ La Jolla, San Diego 92093-0901

Thank you Chuck,

it seems to work also with my real data, but I noted that in the 
example aml$x, which is a factor, gets converted to character in 
aml3.so. Maybe, if I find the time, I should look at 
as.data.frame.matrix and rbind for Surv objects.

Thanks again,
Heinz




More information about the R-help mailing list