I think
subset(set, InfCode %in% x)
does it, where 'x' is your vector of ids (e.g., c(1,3,9) in your example
at the bottom)
Brar Piening wrote:> I've got a big data.frame from which I need to extract data based on a
variable number of Id's (InfCode).
> Until now I've been using the following dull solution as I never needed
to search for more than 5 codes.
>
> Now my needs have increased faster than my R skills did and I need to call
my function with about 25 values for x.
>
> There has to be a *apply or even simpler solution which (after RTM) I'm
not able to figure out.
>
> Can anybody direct me to a possible solution?
>
> Regards,
>
> Brar
>
>
> GetInfCodeSubset <- function(set, x){
> if(1 == length(x))
> return(subset(set, (set$InfCode == x[1])))
> else if(2 == length(x))
> return(subset(set, (set$InfCode == x[1]) | (set$InfCode == x[2])))
> else if(3 == length(x))
> return(subset(set, (set$InfCode == x[1]) | (set$InfCode == x[2]) |
(set$InfCode == x[3])))
> else if(4 == length(x))
> return(subset(set, (set$InfCode == x[1]) | (set$InfCode == x[2]) |
(set$InfCode == x[3]) | (set$InfCode == x[4])))
> else if(5 == length(x))
> return(subset(set, (set$InfCode == x[1]) | (set$InfCode == x[2]) |
(set$InfCode == x[3]) | (set$InfCode == x[4]) | (set$InfCode == x[5])))
> else if(6 == length(x))
> return(subset(set, (set$InfCode == x[1]) | (set$InfCode == x[2]) |
(set$InfCode == x[3]) | (set$InfCode == x[4]) | (set$InfCode == x[5]) |
(set$InfCode == x[6])))
> else stop("Too many elements in x")
> }
>
> set <- data.frame(PatId = c(1:100), InfCode = rep(c(1:20), 5))
>
> GetInfCodeSubset(set, c(1,3,9))
>
> --
>
> ______________________________________________
> 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.