Preparing data for survival analysis
Our original data file,
temp.csv
, has repeated
glucose
values for each subject (
DeID
) at various times points (
Time
) from both before and after treatment (
Pre.or.Post
).
library(Hmisc)
library(Design)
x <- csv.get("temp.csv")
head(x)
We first want to divide
x
into two data frames -- one with only the pre-treatment records, and one with only the post.
xpre <- subset(x, subset=Pre.or.Post=="pre")
xpost <- subset(x, subset=Pre.or.Post=="post")
Now for
xpre
and
xpost
, we can record the
first Time
value at which each subject had a glucose value < 130.
- NOTE:
x
, and therefore xpre
and xpost
, are sorted by subject and time. That's why we can easily pull off the first glucose value for each subject's glucose values > 130.
subxpre <- subset(xpre, subset=glucose < 130)
junk <- tapply(X=subxpre$Time, INDEX=subxpre$DeID, FUN=head, n=1)
newD <- data.frame(DeID=names(junk), frsttimepre = junk)
head(newD)
subxpost <- subset(xpost, subset=glucose < 130)
junk <- tapply(X=subxpost$Time, INDEX=subxpost$DeID, FUN=head, n=1)
newD1 <- data.frame(DeID=names(junk), frsttimepost = junk)
head(newD1)
Now we can merge these "first time" values to
xpre
and
xpost
.
newxpre <- merge(x=xpre, y=newD, by.x="DeID", by.y="DeID", all.x=TRUE)
head(newxpre)
newxpost <- merge(x=xpost, y=newD1, by.x="DeID", by.y="DeID", all.x=TRUE)
head(newxpost)
Now we want to define
eventtime
and
censored
variables for
newxpre
and
newxpost
.
newxpre <- upData(newxpre,
eventtime = ifelse(frsttimepre==Time, frsttimepre, NA),
censored = ifelse(is.na(eventtime), 0, NA))
newxpost <- upData(newxpost,
eventtime = ifelse(frsttimepost==Time, frsttimepost, NA),
censored = ifelse(is.na(eventtime), 0, NA))
Laslty, we post
newxpre
and newxpost= back together.
newx <- data.frame(DeID=c(newxpre$DeID, newxpost$DeID),
Time=c(newxpre$Time, newxpost$Time),
Pre.or.Post=c(newxpre$Pre.or.Post, newxpost$Pre.or.Post),
frsttime=c(newxpre$frsttimepre, newxpost$frsttimepost),
eventtime=c(newxpre$eventtime, newxpost$eventtime),
censored=c(newxpre$censored, newxpost$censored))
This problem was posted by Shirley Liu