[R] if else elseif for data frames

David Winsemius dwinsemius at comcast.net
Mon Aug 13 04:50:34 CEST 2012


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



More information about the R-help mailing list