[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