| Define function make.rm() 
        >
make.rm<-function(constant,repeated,data,contrasts) {if(!missing(constant) && is.vector(constant)) {
 if(!missing(repeated) && is.vector(repeated)) {
 if(!missing(data)) {
 dd<-dim(data)
 replen<-length(repeated)
 if(missing(contrasts))
 contrasts<-
 ordered(sapply(paste("T",1:length(repeated),sep=""),rep,dd[1]))
 else
 contrasts<-matrix(sapply(contrasts,rep,dd[1]),ncol=dim(contrasts)[2])
 if(length(constant) == 1)
cons.col<-rep(data[,constant],replen)
 else
cons.col<-lapply(data[,constant],rep,replen)
 new.df<-data.frame(cons.col,
 repdat=as.vector(data.matrix(data[,repeated])),
 contrasts)
 return(new.df)
 }
 }
 }
 cat("Usage: make.rm(constant, repeated, data [, contrasts])\n")
 cat("\tWhere 'constant' is a vector of indices of non-repeated
data and\n")
 cat("\t'repeated' is a vector of indices of the repeated
measures data.\n")
 }
 
 You
can now use the make.rm function to reformat your data from column to
stacked format. Read a data file that contains repeated measures as
multiple columns
 
        > groceries = read.table("http://ww2.coastal.edu/kingw/statistics/R-tutorials/text/groceries.txt", header=T)> groceries
 
 
          > groceries.stacked <- make.rm(constant="subject", repeated=c("storeA","storeB","storeC","storeD"), data=groceries)> groceries.stacked
 
 |