# 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