[R] replace a for loop with lapply or relative

jim holtman jholtman at gmail.com
Fri Feb 5 03:40:52 CET 2010


Have you considered using a different data structure:

> # change the data structure
> x <- data.frame(
+     type=rep(c('x1', 'x2', 'x3'), each=100),
+     high=c(d[,4], d[,5], d[,6]),
+     value=c(d[,1], d[,2], d[,3]))
> head(x)
  type high      value
1   x1    0  0.8936737
2   x1    0 -1.0472981
3   x1    1  1.9713374
4   x1    0 -0.3836321
5   x1    1  1.6541453
6   x1    1  1.5122127
> sapply(split(x$value, list(x$high, x$type)), function(a) c(min=min(a), max=max(a)))
         0.x1     1.x1        0.x2      1.x2       0.x3      1.x3
min -2.592328 1.364435 0.001314657 0.9447914 -2.9324797 0.9427577
max  1.324004 1.971337 0.925323476 0.9906600  0.8767704 1.5358077
>
>
>


On Thu, Feb 4, 2010 at 4:40 PM, David Freedman <3.14david at gmail.com> wrote:
>
> Dear helpers.
> I often need to make dichotomous variables out of continuous ones (yes, I
> realize the problems with throwing away much of the information), but I then
> like to check the min and max of each category.  I have the following simple
> code to do this that cuts each variable (x1,x2,x3) at the 90th percentile,
> and then prints the min and max of each category:
>
> d=data.frame(x1=rnorm(100),x2=runif(100)); d=transform(d,x3=x1-x2)
> d[,4:6]=data.frame(sapply(d,function(v)as.numeric(v>=quantile(v,0.9))));
> names(d)[4:6]=c('x1high','x2high','x3high')
> head(d)
> for (i in
> 1:3){print(do.call(rbind,by(d[,i],d[,i+3],function(x)(c(min(x),max(x))))))}
>
> Is there a way to replace the ugly for loop in the last line with some type
> of apply function that would know that my continuous and indicator variable
> are 3 variables apart in the dataframe?
>
> Thanks very much
> David Freedman
> --
> View this message in context: http://n4.nabble.com/replace-a-for-loop-with-lapply-or-relative-tp1469453p1469453.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
Cincinnati, OH
+1 513 646 9390

What is the problem that you are trying to solve?



More information about the R-help mailing list