[R] Need help for loop code, thanks

Peter Ehlers ehlers at ucalgary.ca
Thu Oct 7 21:08:48 CEST 2010


On 2010-10-07 12:09, Phil Spector wrote:
> Is this what you're looking for?
>
>> dat = read.table(textConnection('V1    V2     v3
> + 1      a       1.3
> + 1      a       1.5
> + 1      b       2.0
> + 1      a       2.3
> + 1      a       3.4
> + 1      c       5.5
> + 1      d       6.0
> + 1      a       7.0
> + 2      f        1.5
> + 2      g        1.6
> + 2      f         3.4
> + 2      f         4.0
> + 2      g        4.6
> + 2      c        5.0
> + 2      a        5.3'),header=TRUE)
>> aggregate(dat$v3,dat[c('V1','V2')],max)
>     V1 V2   x
> 1  1  a 7.0
> 2  2  a 5.3
> 3  1  b 2.0
> 4  1  c 5.5
> 5  2  c 5.0
> 6  1  d 6.0
> 7  2  f 4.0
> 8  2  g 4.6
>
>   					- Phil Spector
>   					 Statistical Computing Facility
>   					 Department of Statistics
>   					 UC Berkeley
>   					 spector at stat.berkeley.edu
>

Or with plyr:

  require(plyr)
  result <- ddply(dat, .(V1,V2), summarize, MAX=max(v3))

   -Peter Ehlers

>
>
> On Thu, 7 Oct 2010, wangguojie2006 wrote:
>
>>
>> Dear fellows,
>>
>> I've been working this problem for a day and still can't see where the
>> problem is. I really appreciate if anyone can help me out.
>>
>> My data is like:
>>
>> V1    V2     v3
>> 1      a       1.3
>> 1      a       1.5
>> 1      b       2.0
>> 1      a       2.3
>> 1      a       3.4
>> 1      c       5.5
>> 1      d       6.0
>> 1      a       7.0
>> 2      f        1.5
>> 2      g        1.6
>> 2      f         3.4
>> 2      f         4.0
>> 2      g        4.6
>> 2      c        5.0
>> 2      a        5.3
>>
>> What I want to do is to get the max value of V3 for each unique V2 in each
>> V1. For example, when V1=1, unique V2 is (a, b, c, d), and corresponding max
>> value of V3 is (7.0, 2.0, 5.5, 6.0). And V1=2, unique V2 is (f, g, c, a) and
>> max value of V3 is (4.0, 4.6, 5.0, 5.3). Then combinne these max values.
>>
>> My code is like:
>>
>> z<-NULL
>> x<-NULL;y<-NULL
>> for (j in 1:2)
>> {
>>   x<-unique(V2[V1==j])
>>    for (i in 1:length(x))
>>     {
>>      y[i]<-max(V3[V2==x[i]&  V1==j])
>>     }
>>   z<-c(z,y)
>> }
>> length(z)
>>
>> My problem is the length of z is much bigger than the length of I'm supposed
>> to get, like above data, I should only get 8 max values. But the code will
>> return me a number bigger than 8. I'm thinking there might be some
>> overlapping problem. Can someone help?
>>
>> Thank you for your time.
>>
>> Best,
>>
>>
>>
>>
>>
>> --
>> View this message in context: http://r.789695.n4.nabble.com/Need-help-for-loop-code-thanks-tp2967036p2967036.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.
>>
>
> ______________________________________________
> 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