Put one random row dataset to first cell variable
Jan Sabee wrote:
Dear useR help,
This is below my toy dataset,
age married income gender
young no low female
old yes low female
mid no high female
young yes high female
mid yes high female
mid no medium female
old no medium female
young yes medium female
mid yes low male
old yes low male
young no high male
old no high male
mid yes high male
young yes medium male
old yes medium male
and I take one random row (young,no,low,female) then I make like this
age <- c("young","mid","old")
married <- c("no","yes")
income <- c("low","high","medium")
gender <- c("female","male")
then I take one random row again (mid,yes,high,male), now
age <- c("mid","young","old")
married <- c("yes","no")
income <- c("high","low","medium")
gender <- c("male","female")
and etc, each I take one random row I put in the first cell in each
own variable.
Is this possible to make a simple function?
Assumptions:
1) the object is a data frame.
2) all variables are factors (although I have CMA).
3) you want a list containing vectors of the levels for each value in
which the first level is the value in that row.
order.levels<-function(dfrow) {
nvars<-dim(dfrow)[2]
lslist<-sapply(dfrow,levels)
for(i in 1:nvars) {
if(is.factor(dfrow[,i])) {
levelstrings<-levels(dfrow[1,i])
whichlevel<-which(levelstrings==dfrow[1,i])
lslist[[i]]<-c(levelstrings[whichlevel],levelstrings[-whichlevel])
}
}
return(lslist)
}
Say your data frame is called toy.df:
nrows<-dim(toy.df)[1]
order.levels(toy.df[sample(1:nrows,1),])
Whether this is simple is debatable.
Jim