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?
Sincerely,
Jan Sabee
Dimitris Rizopoulos
2005-Apr-20 09:26 UTC
[R] Put one random row dataset to first cell variable
maybe something like this could be helpful
f <- function(..., ref){
lis <- list(...)
for(i in seq(along=lis)){
x <- lis[[i]]
r <- match(ref[i], x)
lis[[i]] <- x[c(r, seq(along=x)[-r])]
}
lis
}
#########
age <- c("young", "mid", "old")
married <- c("no", "yes")
income <- c("low", "high", "medium")
gender <- c("female", "male")
f(age, married, income, gender, ref=c("mid", "yes",
"high", "male"))
f(age, married, income, gender, ref=c("old", "yes",
"medium", "male"))
Best,
Dimitris
----
Dimitris Rizopoulos
Ph.D. Student
Biostatistical Centre
School of Public Health
Catholic University of Leuven
Address: Kapucijnenvoer 35, Leuven, Belgium
Tel: +32/16/336899
Fax: +32/16/337015
Web: http://www.med.kuleuven.ac.be/biostat/
http://www.student.kuleuven.ac.be/~m0390867/dimitris.htm
----- Original Message -----
From: "Jan Sabee" <jan.sabee at gmail.com>
To: <R-help at stat.math.ethz.ch>
Sent: Wednesday, April 20, 2005 10:46 AM
Subject: [R] Put one random row dataset to first cell variable
> 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?
>
> Sincerely,
> Jan Sabee
>
> ______________________________________________
> R-help at 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
>
Yes, this is exactly what I want. Many thanks and best regards, Jan Sabee On 4/20/05, Dimitris Rizopoulos <dimitris.rizopoulos at med.kuleuven.ac.be> wrote:> maybe something like this could be helpful > > f <- function(..., ref){ > lis <- list(...) > for(i in seq(along=lis)){ > x <- lis[[i]] > r <- match(ref[i], x) > lis[[i]] <- x[c(r, seq(along=x)[-r])] > } > lis > } > ######### > age <- c("young", "mid", "old") > married <- c("no", "yes") > income <- c("low", "high", "medium") > gender <- c("female", "male") > > f(age, married, income, gender, ref=c("mid", "yes", "high", "male")) > f(age, married, income, gender, ref=c("old", "yes", "medium", "male")) > > Best, > Dimitris > > ---- > Dimitris Rizopoulos > Ph.D. Student > Biostatistical Centre > School of Public Health > Catholic University of Leuven > > Address: Kapucijnenvoer 35, Leuven, Belgium > Tel: +32/16/336899 > Fax: +32/16/337015 > Web: http://www.med.kuleuven.ac.be/biostat/ > http://www.student.kuleuven.ac.be/~m0390867/dimitris.htm > > > ----- Original Message ----- > From: "Jan Sabee" <jan.sabee at gmail.com> > To: <R-help at stat.math.ethz.ch> > Sent: Wednesday, April 20, 2005 10:46 AM > Subject: [R] Put one random row dataset to first cell variable > > > 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? > > > > Sincerely, > > Jan Sabee > > > > ______________________________________________ > > R-help at 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 > > > >
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
Many thanks Jim. This is the others kind of a random row which I can use. Best wishes, Jan Sabee> 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 >