Hi all, It seems like I cannot use normal 'if' for data frames. What would be the best way to do the following. if data$col1='high' data$col2='H' else if data$col1='Neutral' data$col2='N' else if data$col='low' data$col2='L' else #chuch a warning? Note that col2 was not an existing column and was newly assigned for this task. Thanks, Sachin [[alternative HTML version deleted]]
Hi, Try this: dat1<-data.frame(col1=c(rep("high",3),rep("Neutral",3),rep("low",4))) ?dat1$col2<-ifelse(dat1$col1=="high",dat1$col2<-"H",ifelse(dat1$col1=="Neutral",dat1$col2<-"N","L")) dat1 ????? col1 col2 1???? high??? H 2???? high??? H 3???? high??? H 4? Neutral??? N 5? Neutral??? N 6? Neutral??? N 7????? low??? L 8????? low??? L 9????? low??? L 10???? low??? L A.K. ----- Original Message ----- From: Sachinthaka Abeywardana <sachin.abeywardana at gmail.com> To: r-help at r-project.org Cc: Sent: Sunday, August 12, 2012 8:43 PM Subject: [R] if else elseif for data frames Hi all, It seems like I cannot use normal 'if' for data frames. What would be the best way to do the following. if data$col1='high' ? ? data$col2='H' else if data$col1='Neutral' ? ? data$col2='N' else if data$col='low' ? data$col2='L' else ? #chuch a warning? Note that col2 was not an existing column and was newly assigned for this task. Thanks, Sachin ??? [[alternative HTML version deleted]] ______________________________________________ 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.
The thing is I have about 10 cases. I saw the ifelse statement but was wondering if there was a cleaner method of doing it. The coding will get really messy when I write all 10 cases. Cheers, Sachin On Mon, Aug 13, 2012 at 11:04 AM, arun <smartpink111@yahoo.com> wrote:> Hi, > Try this: > dat1<-data.frame(col1=c(rep("high",3),rep("Neutral",3),rep("low",4))) > > dat1$col2<-ifelse(dat1$col1=="high",dat1$col2<-"H",ifelse(dat1$col1=="Neutral",dat1$col2<-"N","L")) > dat1 > col1 col2 > 1 high H > 2 high H > 3 high H > 4 Neutral N > 5 Neutral N > 6 Neutral N > 7 low L > 8 low L > 9 low L > 10 low L > > A.K. > > > > > ----- Original Message ----- > From: Sachinthaka Abeywardana <sachin.abeywardana@gmail.com> > To: r-help@r-project.org > Cc: > Sent: Sunday, August 12, 2012 8:43 PM > Subject: [R] if else elseif for data frames > > Hi all, > > It seems like I cannot use normal 'if' for data frames. What would be the > best way to do the following. > > if data$col1='high' > data$col2='H' > else if data$col1='Neutral' > data$col2='N' > else if data$col='low' > data$col2='L' > else > #chuch a warning? > > > Note that col2 was not an existing column and was newly assigned for this > task. > > Thanks, > Sachin > > [[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. > >[[alternative HTML version deleted]]
HI, Much better solution: library(car) ?set.seed(1) ?dat2<-data.frame(col1=c(sample(c("high","Neutral","low"),10,replace=TRUE)),col2=rep(NA,10)) ?x<-dat2$col1 ?dat2$col2<-recode(x,'"high"="H";"Neutral"="N";"low"="L"') dat2 #????? col1 col2 #1???? high??? H #2? Neutral??? N #3? Neutral??? N #4????? low??? L #5???? high??? H #6????? low??? L #7????? low??? L #8? Neutral??? N #9? Neutral??? N #10??? high??? H A.K. ________________________________ From: Sachinthaka Abeywardana <sachin.abeywardana at gmail.com> To: arun <smartpink111 at yahoo.com> Sent: Sunday, August 12, 2012 9:18 PM Subject: Re: [R] if else elseif for data frames yup looks good. thanks? Sachin On Mon, Aug 13, 2012 at 11:17 AM, arun <smartpink111 at yahoo.com> wrote: Hi,> >Try this, > >set.seed(1) >?dat2<-data.frame(col1=c(sample(c("high","Neutral","low"),10,replace=TRUE)),col2=rep(NA,10)) >dat2$col2[dat2$col1=="high"]<-"H" >?dat2$col2[dat2$col1=="Neutral"]<-"N" >?dat2$col2[dat2$col1=="low"]<-"L" >?dat2 >#????? col1 col2 >#1???? high??? H >#2? Neutral??? N >#3? Neutral??? N >#4????? low??? L >#5???? high??? H >#6????? low??? L >#7????? low??? L >#8? Neutral??? N >#9? Neutral??? N >#10??? high??? H > > >Not sure if this is okay for you, >A.K.rr > > >A.K. > >________________________________ >From: Sachinthaka Abeywardana <sachin.abeywardana at gmail.com> >To: arun <smartpink111 at yahoo.com> >Cc: R help <r-help at r-project.org> >Sent: Sunday, August 12, 2012 9:07 PM >Subject: Re: [R] if else elseif for data frames > > > >The thing is I have about 10 cases. I saw the ifelse statement but was wondering if there was a cleaner method of doing it. The coding will get really messy when I write all 10 cases. > >Cheers, >Sachin > > >On Mon, Aug 13, 2012 at 11:04 AM, arun <smartpink111 at yahoo.com> wrote: > >Hi, >>Try this: >>dat1<-data.frame(col1=c(rep("high",3),rep("Neutral",3),rep("low",4))) >>?dat1$col2<-ifelse(dat1$col1=="high",dat1$col2<-"H",ifelse(dat1$col1=="Neutral",dat1$col2<-"N","L")) >>dat1 >>????? col1 col2 >>1???? high??? H >>2???? high??? H >>3???? high??? H >>4? Neutral??? N >>5? Neutral??? N >>6? Neutral??? N >>7????? low??? L >>8????? low??? L >>9????? low??? L >>10???? low??? L >> >>A.K. >> >> >> >> >> >>----- Original Message ----- >>From: Sachinthaka Abeywardana <sachin.abeywardana at gmail.com> >>To: r-help at r-project.org >>Cc: >>Sent: Sunday, August 12, 2012 8:43 PM >>Subject: [R] if else elseif for data frames >> >>Hi all, >> >>It seems like I cannot use normal 'if' for data frames. What would be the >>best way to do the following. >> >>if data$col1='high' >>? ? data$col2='H' >>else if data$col1='Neutral' >>? ? data$col2='N' >>else if data$col='low' >>? ?data$col2='L' >>else >>? ?#chuch a warning? >> >> >>Note that col2 was not an existing column and was newly assigned for this >>task. >> >>Thanks, >>Sachin >> >>??? [[alternative HTML version deleted]] >> >>______________________________________________ >>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. >> >> >
On Aug 12, 2012, at 5:43 PM, Sachinthaka Abeywardana wrote:> Hi all, > > It seems like I cannot use normal 'if' for data frames. What would > be the > best way to do the following. > > if data$col1='high' > data$col2='H' > else if data$col1='Neutral' > data$col2='N' > else if data$col='low' > data$col2='L' > else > #chuch a warning? > > > Note that col2 was not an existing column and was newly assigned for > this > task.Using arun's example, dat1: dat1$col2 <- c("H","N", "L","warn")[ match(dat1$col1, c("low", "Neutral", "high"), nomatch=4 )] > dat1 col1 col2 1 high L 2 high L 3 high L 4 Neutral N 5 Neutral N 6 Neutral N 7 low H 8 low H 9 low H 10 low H Nested ifelse constructions would be quite inefficient. I'm not even sure that a 10-deep ifelse construction woul be acceptable to the interpreter. At one point I thought I read something about a nesting depth of 7 as being a limit. (But many years have passed since that reading and it's possible it's just a manufactured memory or that the limit has been raised.) -- David Winsemius, MD Alameda, CA, USA