Alain -
   Here's a reproducible data set:

set.seed(19)
area<-c(rep(1,10),rep(2,10),rep(3,10),rep(4,10),rep(5,10))
type<-c(rep(1:10,5))
a<-rnorm(50)
b<-rnorm(50)
c<-rnorm(50)
d<-rnorm(50)
df<-cbind(area,type,a,b,c,d)

First I'll make a helper function to operate on one row of the data frame:

get2 = function(x){
   y = x[-c(1,2)]
   oy = order(y,decreasing=TRUE)
   nms = colnames(df)[-c(1,2)]
   data.frame(area=rep(x[1],2),type=rep(x[2],2),
              max=y[oy[1:2]],colname=nms[oy[1:2]])
}

Now I can use apply, do.call and rbind to get the answer:

answer = do.call(rbind,apply(df,1,get2))
head(answer)
   area type        max colname
b     1    1  1.7036697       b
c     1    1  0.7910130       c
c1    1    2  2.4576579       c
a     1    2  0.3885812       a
c2    1    3  1.2363598       c
a1    1    3 -0.3443333       a

(My numbers differ from yours because you didn't specify
a seed for the random number generator)

I'm not exactly sure how to form your column "combination", though.

                                        - Phil Spector
                                         Statistical Computing Facility
                                         Department of Statistics
                                         UC Berkeley
                                         spec...@stat.berkeley.edu


On Thu, 10 Feb 2011, Alain D. wrote:

Dear R-List,

I have a dataframe

area<-c(rep(1,10),rep(2,10),rep(3,10),rep(4,10),rep(5,10))
type<-c(rep(1:10,5))
a<-rnorm(50)
b<-rnorm(50)
c<-rnorm(50)
d<-rnorm(50)
df<-cbind(area,type,a,b,c,d)


df
     area type           a              b
c                      d
[1,]    1    1     0.45608192  0.240378547  2.05208079 -1.18827462
[2,]    1    2    -0.12119506 -0.028078577 -2.64323695 -0.83923441
[3,]    1    3     0.09066133 -1.134069619  1.53344812 -0.15670239
[4,]    1    4    -1.34505241  1.919941172 -1.02090099  0.75664358
[5,]    1    5    -0.29279617 -0.314955019 -0.88809266  2.22282022
[6,]    1    6    -0.59697893 -0.652937746  1.05132400 -0.02469151
[7,]    1    7    -1.18199400  0.728165962 -1.51419348  0.65640976
[8,]    1    8    -0.72925659  0.303514237  0.79758488  0.93444350
[9,]    1    9    -1.60080508 -0.187562633  0.51288428 -0.55692877
[10,]    1   10    0.54373268 -0.494994392  0.52902381  1.12938122
[11,]    2    1    -1.29675664 -0.644990784 -2.44067511 -0.18489544
[12,]    2    2     0.86330699  1.458038882  1.17514710  1.32896878
[13,]    2    3     0.30069402  1.361211939  0.84757211  1.14502761
...

Now I want to have for each combination of area and type the name and
corresponding value of the two columns with the highest and second highest
value a,b,c,d.
In the above example it should be something like

combination         max     colname
11                      2.05          c
11                      0.46          a
12                     -0.03          b
12                     -0.12          a
...

(It might be arranged differently, though)

Can anyone help?

Thank you in advance!

Alain

        [[alternative HTML version deleted]]

______________________________________________
R-help@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.


______________________________________________
R-help@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.

Reply via email to