0

このようなマトリックスで

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

つまり、if / ifelse演算子とboolean演算子を使用して、最後の3つに基づく2つの新しい列を作成したいと思います。

私は次のことを試みましたが、成功しませんでした:

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}  
}

私の問題は、if句で&&を使用できるかどうかですが、どういうわけかこれは機能していません。誰かが私に理由のヒントを与えることができますか、それともより良いオプションがありますか?

よろしくお願いします、ステフ

4

1 に答える 1

0

4行目と5行目の組み合わせ、および4行目と6行目の組み合わせで同じアクションを実行したいというループから抜け出しますfor。そうすれば、総称関数を作成して両方の組み合わせに適用できると思います。私はあなたの問題に対して以下の解決策を提案します。

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)
于 2013-03-27T10:16:21.293 に答える