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