On Fri, Feb 24, 2012 at 12:23 PM, William Dunlap <wdun...@tibco.com> wrote: > Use mult[as.character(df$x)] instead of mult[df$x]. > They are different when df$x is a factor and the > character version is what you want.
R will coerce a factor to character to perform the comparison; explicitly calling as.character() is not necessary: > df$x [1] AA BB CC AA DD DD > df$x == "AA" [1] TRUE FALSE FALSE TRUE FALSE FALSE See ?factor for details. Sarah > > 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[as.character(df$x)] > > df > x y > 1 AA 10 > 2 BB 50 > 3 CC NA > 4 AA 40 > 5 DD 75 > 6 DD 90 > > This gets the order right. The NA for "CC" is because > your vector of multipliers didn't include an entry for > CC. You can either add CC=1 to mult or work only on the > subset of the data which has entries in the mult vector. > > > df<- data.frame(x = c("AA","BB","CC","AA","DD","DD"), y = 1:6) > > mult <- c(AA = 10, BB = 25,DD=15) > > i <- as.character(df$x) %in% names(mult) > > df$y[i] <- df$y[i] * mult[as.character(df$x[i])] > > df > x y > 1 AA 10 > 2 BB 50 > 3 CC 3 > 4 AA 40 > 5 DD 75 > 6 DD 90 > > Bill Dunlap > Spotfire, TIBCO Software > wdunlap tibco.com > >> -----Original Message----- >> From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On >> Behalf Of Arnaud Gaboury >> Sent: Friday, February 24, 2012 8:37 AM >> To: Uwe Ligges >> Cc: r-help@r-project.org >> Subject: Re: [R] data frame manipulation with condition >> >> > 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 >> > >> > >> > >> > >> >> and so on with other conditions. >> >> >> >> TY for any help. >> >> >> >> Trading >> >> >> >> A2CT2 Ltd. >> >> ______________________________________________ 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.