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

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


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 {
             	x <- as.matrix(x)
             	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




More information about the R-help mailing list