You need, as I already suggested, to use a value of 1 for levels you don't want to change.
> mult <- c(AA = 10, BB = 25, CC=1, DD=15) > mult[df$x] AA BB CC AA DD DD 10 25 1 10 15 15 > df$y * mult[df$x] AA BB CC AA DD DD 10 50 3 40 75 90 On Fri, Feb 24, 2012 at 11:36 AM, Arnaud Gaboury <arnaud.gabo...@a2ct2.com> wrote: >> df<- data.frame(x = c("AA","BB","CC","AA","DD","DD"), y = 1:6) >> mult <- c(AA = 10, BB = 25,DD=15) >> df$y <- df$y * mult[df$x] >> df > x y > 1 AA 10 > 2 BB 50 > 3 CC 45 > 4 AA 40 > 5 DD NA > 6 DD NA > > My df is in fact much more longer than the chosen example shown here. It > seems your tip didn't do the job. > I am expecting this as result : > >> df > x y > 1 AA 10 ----> if df$x==AA, df$y<-1*10 > 2 BB 50 ----> if df$x==BB, df$y<-2*25 > 3 CC 3 NOTHING > 4 AA 40 ----> if df$x==AA, df$y<-4*10 > 5 DD 75 ----> if df$x==DD, df$y<-5*15 > 6 DD 90 ----> if df$x==DD, df$y<-6*15 > > Arnaud Gaboury > > A2CT2 Ltd. > > -----Original Message----- > From: Uwe Ligges [mailto:lig...@statistik.tu-dortmund.de] > Sent: vendredi 24 février 2012 17:07 > To: Arnaud Gaboury > Cc: r-help@r-project.org > Subject: Re: [R] data frame manipulation with condition > > > > On 24.02.2012 16:59, Arnaud Gaboury wrote: >> TY Uwe, >> >> So I will have to write a line for each condition? Right? >> >> In fact I was trying to do something with apply in one line, but couldn't >> achieve any result. In fact, all my transformation will be multiplying one >> object by a specific number according to the value of df$x. > > In that case: > > mult <- c(AA = 10, BB = 25) > > Then: > > > df$y <- df$y * mult[df$x] > > > Uwe Ligges > > >> >> Arnaud Gaboury >> >> A2CT2 Ltd. >> >> >> -----Original Message----- >> From: Uwe Ligges [mailto:lig...@statistik.tu-dortmund.de] >> Sent: vendredi 24 février 2012 16:33 >> To: Arnaud Gaboury >> Cc: r-help@r-project.org >> Subject: Re: [R] data frame manipulation with condition >> >> >> >> On 24.02.2012 16:25, Arnaud Gaboury wrote: >>> Dear list, >>> >>> n00b question, but still can't find any easy answer. >>> >>> Here is a df: >> >> >> Change >> >>>> df<-data.frame(cbind(x=c("AA","BB","CC","AA"),y=1:4)) >> >> to >> >> df<- data.frame(x = c("AA","BB","CC","AA"), y = 1:4) >> >> to make your object a sensible data.frame. >> >> >> >>>> df >>> x y >>> 1 AA 1 >>> 2 BB 2 >>> 3 CC 3 >>> 4 AA 4 >>> >>> >>> I want to modify this df this way : >>> if df$x=="AA" then df$y=df$y*10 >> >> df$y[df$x=="AA"]<- df$y[df$x=="AA"] * 25 >> >> ... >> >> >> Uwe Ligges >> >> >>> if df$x=="BB" then df$y=df$y*25 >> >> -- Sarah Goslee http://www.functionaldiversity.org ______________________________________________ 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.