if / ifelse循环中的布尔运算符

时间:2013-03-26 22:21:19

标签: r if-statement boolean-operations

使用像这样的矩阵

r<-20;
c<-6;
m1 <- round(matrix(runif(r*c), r, c)))

我想创建两个基于最后三列的新列,即if / ifelse和boolean运算符。

我尝试了以下但没有成功:

for (i in 1:dim(m1)[1]){
  if(sum(m1[i,4:6]==0)) {m1$Code1[i]<-0;m1$Code2[i]<-0}
  else if(sum(m1[i,4:6]==3)) {m1$Code1[i]<-5;m1$Code2[i]<-5}
  else if(m1[i,4]==0 && m1[,5]==1) {m1$Code1[i]<-3}
  else if(m1[i,4]==0 && m1[,6]==1) {m1$Code2[i]<-3}
  else if(m1[i,4]==1 && m1[,5]==0) {m1$Code1[i]<-2}
  else if(m1[i,4]==1 && m1[,6]==0) {m1$Code2[i]<-2} 
  else if(m1[i,4]==1 && m1[,5]==1) {m1$Code1[i]<-4}
  else if(m1[i,4]==1 && m1[,6]==1) {m1$Code2[i]<-4}  
}

我的问题是,如果我可以使用&amp;&amp;在if子句中,但不知何故,这是行不通的。有人可以给我一个暗示为什么或者有更好的选择?

提前致谢, 斯蒂芬

1 个答案:

答案 0 :(得分:0)

我从你的for循环中提取你要对第4行和第5行的组合以及第4行和第6行的组合执行相同的操作。我认为你最好能够制作通用函数并将其应用于两种组合。我为您的问题提出以下解决方案。

get.code <- function(x) {
 if(x[1] == 0 & x[2] == 0){0} else if (x[1] == 0 & x[2] == 1){3
 }else if(x[1] == 1 & x[2] == 1){4} else {2}
}

code1 <- apply(m1[,c(4,5)], 1, get.code)
code2 <- apply(m1[,c(4,6)], 1, get.code)
cbind(m1,code1, code2)