[R] survSplit with data.frame containing a Surv object
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? 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@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.
Re: [R] survSplit with data.frame containing a Surv object
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@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:cbe...@tajo.ucsd.edu UC San Diego http://famprevmed.ucsd.edu/faculty/cberry/ La Jolla, San Diego 92093-0901 __ R-help@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.
Re: [R] survSplit with data.frame containing a Surv object
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@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:cbe...@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 __ R-help@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.
Re: [R] survSplit with data.frame containing a Surv object
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@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:cbe...@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@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:cbe...@tajo.ucsd.edu UC San Diego http://famprevmed.ucsd.edu/faculty/cberry/ La Jolla, San Diego 92093-0901 __ R-help@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.
Re: [R] survSplit with data.frame containing a Surv object
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@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:cbe...@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@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:cbe...@tajo.ucsd.edu UC San Diego http://famprevmed.ucsd.edu/faculty/cberry/ La Jolla, San Diego 92093-0901 __ R-help@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:cbe...@tajo.ucsd.edu UC San Diego http://famprevmed.ucsd.edu/faculty/cberry/ La Jolla, San Diego 92093-0901 __ R-help@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.