[R] Converting factors to bounded random numerical data
David L Carlson
dcarlson at tamu.edu
Thu Oct 11 05:29:44 CEST 2012
This should work:
> a <- data.frame(X=rnorm(25, 20, 4), Y=rnorm(25, 15, 3),
Z=sample(c(LETTERS[1:3]), 25, replace=TRUE))
> head(a)
X Y Z
1 17.77449 14.425221 B
2 19.95400 13.408439 A
3 13.40162 12.219984 A
4 15.89822 19.214026 B
5 18.55717 14.568691 B
6 19.86619 11.606099 B
> Zfact <- data.frame(factor=LETTERS[1:3], low=c(1, 5, 10), high=c(4, 9,
12))
> Zfact
factor low high
1 A 1 4
2 B 5 9
3 C 10 12
> set.seed(42)
> a$Zval <- runif(nrow(a), Zfact$low[as.numeric(a$Z)],
Zfact$high[as.numeric(a$Z)])
> head(a, 10)
X Y Z Zval
1 17.77449 14.42522 B 8.659224
2 19.95400 13.40844 A 3.811226
3 13.40162 12.21998 A 1.858419
4 15.89822 19.21403 B 8.321791
5 18.55717 14.56869 B 7.566982
6 19.86619 11.60610 B 7.076384
7 14.72275 18.38715 A 3.209765
8 26.09711 17.79988 C 10.269333
9 18.72558 15.64477 C 11.313985
10 17.33280 19.03034 B 7.820259
----------------------------------------------
David L Carlson
Associate Professor of Anthropology
Texas A&M University
College Station, TX 77843-4352
> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
> project.org] On Behalf Of jim holtman
> Sent: Wednesday, October 10, 2012 8:32 PM
> To: KoopaTrooper
> Cc: r-help at r-project.org
> Subject: Re: [R] Converting factors to bounded random numerical data
>
> You need to include how many random numbers you want to create; you
> are asking for only 1, that is why they are are the same. You
> probably want something like:
>
> a$Z<-ifelse(a$Z=="L"
> ,sample(1:4, nrow(a), TRUE)
> ,ifelse(a$Z=="M"
> ,sample(5:9, nrow(a), TRUE)
> ,ifelse(a$Z=="U"
> ,sample(10:12, nrow(a), TRUE)
> , -42 # you had a character which would have converted
> everything to character
> )
> )
> )
>
> On Wed, Oct 10, 2012 at 8:36 PM, KoopaTrooper <ncooper1 at tulane.edu>
> wrote:
> > I have a data set (a) with three columns (X,Y,Z). The first 2 columns
> are
> > numeric. The third (Z) is a factor with three levels A,B,C. I want to
> turn
> > each A into a different random number between 1 and 4, each B into a
> > different random number between 5 and 8, etc.
> >
> > I tried this:
> >
> > a$Z<-
> ifelse(a$Z=="L",sample(1:4,1),ifelse(a$Z=="M",sample(5:9,1),ifelse(a$Z=
> ="U",sample(10:12,1),"")
> >
> > and it almost worked but changed all the "A's" into the same random
> number.
> > I need a different random number for each A. Ideas?
> >
> > Thanks,
> >
> >
> >
> > --
> > View this message in context:
> http://r.789695.n4.nabble.com/Converting-factors-to-bounded-random-
> numerical-data-tp4645801.html
> > Sent from the R help mailing list archive at Nabble.com.
> >
> > ______________________________________________
> > R-help at r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide http://www.R-project.org/posting-
> guide.html
> > and provide commented, minimal, self-contained, reproducible code.
>
>
>
> --
> Jim Holtman
> Data Munger Guru
>
> What is the problem that you are trying to solve?
> Tell me what you want to do, not how you want to do it.
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-
> guide.html
> and provide commented, minimal, self-contained, reproducible code.
More information about the R-help
mailing list