[R] Problem getting an ifelse statment to work
Thomas W Blackwell
tblackw at umich.edu
Tue Oct 7 16:33:28 CEST 2003
Greg -
I am puzzled that the total counts in table(qs2) and table(qs9)
could be different, if these are in fact two columns from the same
data frame. I'm guessing that there are NAs in one or both columns,
in addition to the digits 1,2,3,4, and that table() by default
does not show them. (It doesn't.)
If there are NAs in either column, I would expect both ifelse()
and the logic in both Andy's and Richard's code to not produce the
result you have in mind. Here's something which might work as is,
or might need some extension:
new <- ifelse(is.na(qs2), ifelse(is.na(qs9), 0, qs9), qs2)
You can find out how many NAs there are in column qs2 by doing
sum(is.na(qs2))
Do let us know what finally works.
- tom blackwell - u michigan medical school - ann arbor -
On Mon, 6 Oct 2003, Liaw, Andy wrote:
> This is a "long" way; i.e., not necessarily efficient:
>
> > qs2
> [1] 2 1 1 4 4 4 1 1 1 4 2 4 3 1 4 3 3 2 4 3
> > qs9
> [1] 4 4 1 3 4 3 1 3 1 4 1 2 3 3 4 4 1 4 2 3
> > decision <- function(a, b) {
> + if (a == 1 || b == 1) return(1)
> + if (a == 2 || b == 2) return(2)
> + if (a == 3 || b == 3) return(3)
> + if (a == 4 || b == 4) return(4)
> + NA
> + }
> > mapply(decision, qs2, qs9)
> [1] 2 1 1 3 4 3 1 1 1 4 1 2 3 1 4 3 1 2 2 3
>
> Hope this is what you want.
>
> Andy
>
> > -----Original Message-----
> > From: Greg Blevins [mailto:gblevins at mn.rr.com]
> > Sent: Monday, October 06, 2003 11:21 PM
> > Subject: [R] Problem getting an ifelse statment to work
> >
> > I trust I have a simple request. I have a dataframe which
> > among its contents are two variables, qs2 and qs9, which have
> > the following frequencies.
> >
> > > table(qs2)
> > qs2
> > 1 2 3 4
> > 40 22 11 29
> >
> > > table(qs9)
> > qs9
> > 1 2 3 4
> > 162 172 91 179
> >
> > I simply want to create a new variable which I have called
> > SchCode that would be filled based on the following logic
> > (written in Systat syntax):
> >
> > if qs2 = 1 or qs9 = 1 then let SchCode = 1
> > if qs2 = 2 or qs9 = 2 then let SchCode = 2
> > if qs2 = 3 or qs9 = 3 then let SchCode = 3
> > if qs2 = 4 or qs9 = 4 then let SchCode = 4
> >
> > I have looked through my two Ripley texts, searched the
> > R-help, and have tried various ifelse statements, but I
> > cannot get it right. Help would be appreciated.
> >
> > Thanks,
> > Greg Blevins
> > The Market Solutions Group
> >
More information about the R-help
mailing list