On Jun 14, 2009, at 6:33 PM, Chuck Cleland wrote:
On 6/14/2009 6:18 PM, Mark Na wrote:
Here's what I need to do (dummy example, my data are more
complicated):
If type = A or B or C
and status = a then count = 1
and status = b then count = 2
and status = c then count = 3
Else if type = D or E or F
and status = a then count = 9
and status = b then count = 8
and status = c then count = 7
End
Seems simple when I write it like that, but the R code is escaping
me.
mydf <- data.frame(type = sample(LETTERS[1:6], 40, replace=TRUE),
status = sample(letters[1:3], 40, replace=TRUE))
mydf$count <- with(mydf,
ifelse(type %in% c('A','B','C') & status == 'a', 1,
ifelse(type %in% c('A','B','C') & status == 'b', 2,
ifelse(type %in% c('A','B','C') & status == 'c', 3,
ifelse(type %in% c('D','E','F') & status == 'a', 9,
ifelse(type %in% c('D','E','F') & status == 'b', 8,
ifelse(type %in% c('D','E','F') & status == 'c', 7,
NA)))))))
Or more compactly and perhaps easier to maintain since you are
approaching the nesting limits of ifelse and the OP said he had a more
complex operation to perform:
library(car)
mydf$count <- with(mydf, ifelse( type %in% c('A','B','C'),
recode( status, " 'a'=1; 'b'=2; 'c'=3 ",
FALSE),
ifelse( type %in% c('D','E','F') ,
recode( status, " 'a'=9; 'b'=8;
'c'=7 ", FALSE),
NA) ) )
David Winsemius, MD
Heritage Laboratories
West Hartford, CT
______________________________________________
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.