Hi, How can I accomplish this task in R? V1 10 20 30 10 10 20 Create a new column V2 such that: If V1 = 10 then V2 = 4 If V1 = 20 then V2 = 6 V1 = 30 then V2 = 10 So the O/P looks like this V1 V2 10 4 20 6 30 10 10 4 10 4 20 6 Thanks in advance. Sachin __________________________________________________ [[alternative HTML version deleted]]
Try: V1 <- matrix(c(10, 20, 30, 10, 10, 20), nc = 1) V2 <- 4 * (V1 == 10) + 6 * (V1 == 20) + 10 * (V1 == 30) or V2 <- matrix(c(4, 6, 10)[V1/10], nc = 1) On 4/21/06, Sachin J <sachinj.2006 at yahoo.com> wrote:> Hi, > > How can I accomplish this task in R? > > V1 > 10 > 20 > 30 > 10 > 10 > 20 > > Create a new column V2 such that: > If V1 = 10 then V2 = 4 > If V1 = 20 then V2 = 6 > V1 = 30 then V2 = 10 > > So the O/P looks like this > > V1 V2 > 10 4 > 20 6 > 30 10 > 10 4 > 10 4 > 20 6 > > Thanks in advance. > > Sachin > > __________________________________________________ > > > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html >
On 4/21/2006 4:05 PM, Sachin J wrote:> Hi, > > How can I accomplish this task in R? > > V1 > 10 > 20 > 30 > 10 > 10 > 20 > > Create a new column V2 such that: > If V1 = 10 then V2 = 4 > If V1 = 20 then V2 = 6 > V1 = 30 then V2 = 10Gabor's solution is fine; something that looks a little bit more like your code is this: V2 <- NA V2 <- ifelse( V1 == 10, 4, V2) V2 <- ifelse( V1 == 20, 6, V2) V2 <- ifelse( V1 == 30, 10, V2) or V2 <- ifelse( V1 == 10, 4, ifelse( V1 == 20, 6, ifelse( V1 == 30, 10, NA ))) (where the NA is to handle any unexpected case where V1 isn't 10, 20 or 30). My preference would be to use just one assignment, and if I was sure 10, 20 and 30 were the only possibilities, would use V2 <- ifelse( V1 == 10, 4, ifelse( V1 == 20, 6, 10 )) Duncan Murdoch> > So the O/P looks like this > > V1 V2 > 10 4 > 20 6 > 30 10 > 10 4 > 10 4 > 20 6 > > Thanks in advance. > > Sachin > > __________________________________________________ > > > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
Here is a compact solution using approx: DF$V2 <- approx(c(10, 20, 30), c(4,6,10), DF$V1)$y On 4/21/06, Gabor Grothendieck <ggrothendieck at gmail.com> wrote:> DF <- data.frame(V1 = c(10, 20, 30, 10, 10, 20)) > DF$V2 <- with(DF, 4 * (V1 == 10) + 6 * (V1 == 20) + 10 * (V1 == 30)) > DF$V3 <- c(4, 6, 10)[DF$V1/10] > > or > > DF <- data.frame(V1 = c(10, 20, 30, 10, 10, 20)) > DF <- transform(DF, V2 = 4 * (V1 == 10) + 6 * (V1 == 20) + 10 * (V1 == 30), > V3 = c(4, 6, 10)[V1/10]) > > On 4/21/06, Sachin J <sachinj.2006 at yahoo.com> wrote: > > > > Hi Gabor, > > > > The first one works fine. Just out of curiosity, in second solution: I dont > > want to create a matrix. I want to add a new column to the existing > > dataframe (i.e. V2 based on the values in V1). Is there a way to do it? > > > > TIA > > Sachin > > > > > > > > Gabor Grothendieck <ggrothendieck at gmail.com> wrote: > > > > Try: > > > > V1 <- matrix(c(10, 20, 30, 10, 10, 20), nc = 1) > > > > V2 <- 4 * (V1 == 10) + 6 * (V1 == 20) + 10 * (V1 == 30) > > > > or > > > > V2 <- matrix(c(4, 6, 10)[V1/10], nc = 1) > > > > On 4/21/06, Sachin J wrote: > > > Hi, > > > > > > How can I accomplish this task in R? > > > > > > V1 > > > 10 > > > 20 > > > 30 > > > 10 > > > 10 > > > 20 > > > > > > Create a new column V2 such that: > > > If V1 = 10 then V2 = 4 > > > If V1 = 20 then V2 = 6 > > > V1 = 30 then V2 = 10 > > > > > > So the O/P looks like this > > > > > > V1 V2 > > > 10 4 > > > 20 6 > > > 30 10 > > > 10 4 > > > 10 4 > > > 20 6 > > > > > > Thanks in advance. > > > > > > Sachin > > > > > > __________________________________________________ > > > > > > > > > > > > [[alternative HTML version deleted]] > > > > > > ______________________________________________ > > > R-help at stat.math.ethz.ch mailing list > > > https://stat.ethz.ch/mailman/listinfo/r-help > > > PLEASE do read the posting guide! > > http://www.R-project.org/posting-guide.html > > > > > > > > > > > > > ________________________________ > > Love cheap thrills? Enjoy PC-to-Phone calls to 30+ countries for just 2?/min > > with Yahoo! Messenger with Voice. > > > > >