2016-10-18 8 views
1

現在、このコードは、dx $ resがdx $ x0の値に応じてdx $ val1またはdx $ val2から値を選択するベクトルである場合の処理​​を行います。2つの異なるベクトルからベクトル選択値を作成する

x0<-c(1,2,1,2,2,1) 
val1<-c(8,6,4,5,3,2) 
val2<-c(4,8,6,7,9,5) 
dx<-data.frame(x0,val1,val2) 
dx$res<-(dx$x0==1)*dx$val1+(dx$x0==2)*dx$val2 

適用機能を使用するようにこれを行うより洗練された方法があるかどうかを知りたいと思います。

+1

私は 'WITH'使用するように誘惑されるだろう:' DX $ RES <を - '(val2の* val1と+(X0 == 2)* DX、(X0 == 1))で。おそらく読みやすくなります。 'ifelse'ソリューションもありますが、私はあなたが使った方法を好みます。 – lmo

+0

命題に感謝します。 – Kersijus

答えて

1

オプションは、model.matrixrowSumsです。また、 'x0'列の 'n'個の別個の要素の方が一般的です。

dx$res <- rowSums(dx[-1]*model.matrix(~ factor(x0) - 1 , dx)) 
dx$res 
#[1] 8 8 4 7 9 2 
+1

これは非常にきれいです、ありがとうakrun。 – Kersijus

関連する問題