# NOT RUN { summary(Indometh) wide <- reshape(Indometh, v.names = "conc", idvar = "Subject", timevar = "time", direction = "wide") wide reshape(wide, direction = "long") reshape(wide, idvar = "Subject", varying = list(2:12), v.names = "conc", direction = "long") ## times need not be numeric df <- data.frame(id = rep(1:4, rep(2,4)), visit = I(rep(c("Before","After"), 4)), x = rnorm(4), y = runif(4)) df reshape(df, timevar = "visit", idvar = "id", direction = "wide") ## warns that y is really varying reshape(df, timevar = "visit", idvar = "id", direction = "wide", v.names = "x") ## unbalanced 'long' data leads to NA fill in 'wide' form df2 <- df[1:7, ] df2 reshape(df2, timevar = "visit", idvar = "id", direction = "wide") ## Alternative regular expressions for guessing names df3 <- data.frame(id = 1:4, age = c(40,50,60,50), dose1 = c(1,2,1,2), dose2 = c(2,1,2,1), dose4 = c(3,3,3,3)) reshape(df3, direction = "long", varying = 3:5, sep = "") ## an example that isn't longitudinal data state.x77 <- as.data.frame(state.x77) long <- reshape(state.x77, idvar = "state", ids = row.names(state.x77), times = names(state.x77), timevar = "Characteristic", varying = list(names(state.x77)), direction = "long") reshape(long, direction = "wide") reshape(long, direction = "wide", new.row.names = unique(long$state)) ## multiple id variables df3 <- data.frame(school = rep(1:3, each = 4), class = rep(9:10, 6), time = rep(c(1,1,2,2), 3), score = rnorm(12)) wide <- reshape(df3, idvar = c("school","class"), direction = "wide") wide ## transform back reshape(wide) # }
Run the code above in your browser using DataCamp Workspace