# Relabeling Observations obs <- c("f7", "f8", "m1", "m2", "m3", "f3", "m4", "f1", "m7", "m7", "f4", "m5", "f5", "m6", "f6", "m8", "m9", "f9", "m10", "f10", "f2") splitstr = function(strings) { # Split the strings fpart = substring(strings,1,1) fpart[fpart == "f"] = "female" fpart[fpart == "m"] = "male" ipart = as.integer(substring(strings,2)) rframe = data.frame(cbind(fpart,ipart)) names(rframe) = c("gender","index") return(rframe) } part1 = splitstr(obs) # Part 2 - Ragged longitudinal data # Here we have five different functions - one for each task #2.1 How many people have 1,2,3 obs - function will assume there is some #kind of id variable idobs = function(idvar) { # A double table should do it idsummary = table(table(idvar)) return(idsummary) } #2.2 Create a new variable that numbers obs for person (in time) orderobs = function(idvar,timevar) { # idvar is a vector of individual ids # timevar is a vector of observation times ordvar = rep(0,length(idvar)) ids = unique(idvar) for (i in 1:length(ids)) { iobs = 1:length(idvar[idvar==ids[i]]) ordvar[idvar == ids[i]] = order(timevar[idvar == ids[i]]) } return(ordvar) } # Part 3 - Folding functions