# mapple

4 messages
Open this post in threaded view
|

## mapple

 With the snippet of data below I’m trying to do an if/then type of thing:     row 1 – if all five variables equal 0 then code equals 1;     row 3 – if v1 = 1 and v2 = 1 then code = 5;     row 7 – if v1 = 0 and v2 = 1 and v3 = 2 then code = 10 There are 24 codes in the complete database.    v1 v2 v3 v4 v5 code 1   0  0  0  0  0    1 2   1  4  0  0  0    1 3   1  1  0  0  0    1 4   1  0  1  0  0    1 5   2  0  1  0  0    1 6   0  1  0  0  0    1 7   0  1  2  0  0    1 8   0  1  2  3  0    1 9   0  2  3  4  4    1 10  0  0  0  2  3    1  I understand that the mapply function can do things like this but I have been reading documentation and poking around with Google but am getting nowhere.  Any advise whould be greatly appreciated.           [[alternative HTML version deleted]] ______________________________________________ [hidden email] mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|

## Re: mapple

 Hi Phillip, The following seems to do what you want: phdf<-read.table(text="v1 v2 v3 v4 v5 code  0  0  0  0  0    1  1  4  0  0  0    1  1  1  0  0  0    1  1  0  1  0  0    1  2  0  1  0  0    1  0  1  0  0  0    1  0  1  2  0  0    1  0  1  2  3  0    1  0  2  3  4  4    1  0  0  0  2  3    1",  header=TRUE,  stringsAsFactors=FALSE) rules<-list("x[1]==0&&x[2]==0&&x[3]==0&&x[4]==0&&x[5]==0",  "x[1]==1&&x[2]==1","x[1]==0&&x[2]==1&&x[3]==2") outcomes<-c(1,5,10) apply_rule<-function(x,rule) return(eval(parse(text=rule))) for(ri in 1:length(rules))  phdf[apply(phdf,1,apply_rule,rules[[ri]]),"code"] <- outcomes[ri] and can be expanded to the number of rules that you want. BUT, you have not specified a non-match value, so your initial values for "code" will persist. Jim On Wed, Oct 2, 2019 at 12:32 PM Phillip Heinrich <[hidden email]> wrote: > > With the snippet of data below I’m trying to do an if/then type of thing: >     row 1 – if all five variables equal 0 then code equals 1; >     row 3 – if v1 = 1 and v2 = 1 then code = 5; >     row 7 – if v1 = 0 and v2 = 1 and v3 = 2 then code = 10 > > There are 24 codes in the complete database. > > >    v1 v2 v3 v4 v5 code > 1   0  0  0  0  0    1 > 2   1  4  0  0  0    1 > 3   1  1  0  0  0    1 > 4   1  0  1  0  0    1 > 5   2  0  1  0  0    1 > 6   0  1  0  0  0    1 > 7   0  1  2  0  0    1 > 8   0  1  2  3  0    1 > 9   0  2  3  4  4    1 > 10  0  0  0  2  3    1  I understand that the mapply function can do things like this but I have been reading documentation and poking around with Google but am getting nowhere.  Any advise whould be greatly appreciated. >         [[alternative HTML version deleted]] > > ______________________________________________ > [hidden email] mailing list -- To UNSUBSCRIBE and more, see > 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. ______________________________________________ [hidden email] mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.