On Wed, Dec 7, 2011 at 4:02 AM, Eric Fail <eric.f...@gmx.us> wrote: > Dear list, > > I have been struggling with this for some time now, and for the last hour I > have been struggling to make a working example for the list. I hope someone > out there have some experience with plotting longitudinal data that they will > share. > > My data is some patient data with three different time stamps. First the > patients are identified at different times (first time stamp). Second, they > go through an assessment phase and begin their treatment (time stamp 2). > Finally they are admitted from the hospital at some point (time stamp 3), > > I would like to make a spaghetti plot with the assessment phase in one color > and the treatment phase in another color. > > I used ggplot2, and with this example data and only two time points; it works > fine (I call it my working example), > > library(ggplot2) > df <- data.frame( > date = seq(Sys.Date(), len=104, by="1 day")[sample(104, 52)], > patient = factor(rep(1:26, 2), labels = LETTERS) > ) > df <- df[order(df$date), ] > dt <- qplot(date, patient, data=df, geom="line") > dt + scale_x_date() > df[ which(df$patient=='E'), c("patient", "date")] > > But, if I have three time points, R, for some reason I do not yet understand, > add the two second time points in some funny way. > > Finally, when that is solved; how do I colorize the different parts of the > line so the assessment phase gets one color and the treatment phase another? > > I want to be able to show how long we have been in contact with our patients, > how much of the contact time that was assessment and how much that was actual > treatment. > > Below is an example (I call it the not-working example) > > df2 <- data.frame( > date2 = seq(Sys.Date(), len= 156, by="2 day")[sample(156, 78)], > patient2 = factor(rep(1:26, 3), labels = LETTERS) > ) > > df2 <- df2[order(df2$date2), ] > dt2 <- qplot(date2, patient2, data=df2, geom="line") > dt2 + scale_x_date(major="months", minor="weeks") > df2[ which(df2$patient2=='B'), c("patient2", "date2")]
Did you mean something like this? library(ggplot2) library(plyr) df2 <- data.frame( date2 = seq(Sys.Date(), len= 156, by="2 day")[sample(156, 78)], patient2 = factor(rep(1:26, 3), labels = LETTERS) ) df2 <- ddply(df2, "patient2", mutate, visit = order(date2)) qplot(date2, patient2, data = df2, geom = "line") + geom_point(aes(colour = factor(visit))) # or this? library(ggplot2) library(plyr) df2 <- data.frame( date2 = seq(Sys.Date(), len= 156, by="2 day")[sample(156, 78)], patient2 = factor(rep(1:26, 3), labels = LETTERS) ) df2 <- ddply(df2, "patient2", mutate, visit = order(date2)) qplot(date2, patient2, data = df2, geom = "line", colour = factor(visit), group = patient2) # Obviously the lines are drawn between the observations so you only see the first two visits. Hadley -- Assistant Professor / Dobelman Family Junior Chair Department of Statistics / Rice University http://had.co.nz/ ______________________________________________ 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.