Re: [R] Put one random row dataset to first cell variable

From: Jim Lemon <bitwrit_at_ozemail.com.au>
Date: Wed 20 Apr 2005 - 21:53:28 EST

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



R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Received on Wed Apr 20 21:56:01 2005

This archive was generated by hypermail 2.1.8 : Fri 03 Mar 2006 - 03:31:17 EST