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

Charles C. Berry cberry at tajo.ucsd.edu
Tue Jul 14 00:30:29 CEST 2009


On Mon, 13 Jul 2009, Charles C. Berry wrote:

> On Mon, 13 Jul 2009, Heinz Tuechler wrote:
>
>>  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.
>> 
>
>
> Heinz,
>
> Try
>
>     newdata <- lapply(data, function(x) {
>         if (!is.matrix(x)) {
> 	 	rep(x,ntimes +1 )
> 	 } else {

Oops. The next line is unneeded:

>            	 x <- as.matrix(x)


Chuck


>            	 x[rep(1:nrow(x), ntimes + 1),]}})
>
>
> HTH,
>
> Chuck
>
>>  Thanks again,
>>  Heinz
>>
>>  ______________________________________________
>>  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
>
> ______________________________________________
> 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




More information about the R-help mailing list