Hello,
A logical index seems right. (And even intuitive?)
Create an index based on the conditions, multiplying 0/1 (FALSE/TRUE) by
the condition number. If all conditions are false, the index will be 0.
Then use ifelse() to update 'code'.
new_values <- c(1, 5, 10)
i <- apply(phdf[-6], 1, function(x){
1*all(x == 0) + # rule 1
2*(x[1] == 1 & x[2] == 1) + # rule 2
3*(x[1] == 0 & x[2] == 1 & x[3] == 2) # rule 3
})
phdf$code <- ifelse(i == 0, phdf$code, new_values[i])
Hope this helps,
Rui Barradas
Às 04:24 de 02/10/19, Jim Lemon escreveu:
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 <herd_...@cox.net> 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]]
______________________________________________
R-help@r-project.org 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.
______________________________________________
R-help@r-project.org 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.
______________________________________________
R-help@r-project.org 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.