RIには3つの列を持つ行列のデータがあり、最初の2つの列の値を三番。 3番目の列が '1'の場合は、1番目と2番目の列の値を両方とも0.5に置き換えます(3番目の列は無関係ですが、後で削除します)。そうでなければ、そのままそのまま残します。R - 行列の行の値を列の値に条件付きで代入する
> MAT
a b c
t4 0 1 0
t5 1 0 0
t6 0 1 0
t7 0 1 0
t8 0 1 0
t3 0 1 0
t1 1 0 0
t2 0 1 0
t9 0 0 1
t10 0 0 1
私は手動でこれを行うことができます。
> MAT["t9",1:3]=c(.5,.5,0)
> MAT["t10",1:3]=c(.5,.5,0)
> MAT
a b c
t4 0.0 1.0 0
t5 1.0 0.0 0
t6 0.0 1.0 0
t7 0.0 1.0 0
t8 0.0 1.0 0
t3 0.0 1.0 0
t1 1.0 0.0 0
t2 0.0 1.0 0
t9 0.5 0.5 0
t10 0.5 0.5 0
が、私は、データの約20セットを持っており、そのうちのいくつかのために、私は約100行を交換する必要があります。私はそれを自動化するために使用できるコードがあるかどうか疑問に思っていました。私は(ifelseをしようとしてきた)が、私は結果を理解していない:
>ifelse(MAT[,3]==1,MAT[,1:3]==c(0.5,0.5,0),MAT[,3]==0)
t4 t5 t6 t7 t8 t3 t1 t2 t9 t10
TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
> ifelse(MAT[,3]==1,MAT[,1:3]==c(0.5,0.5,0),ifelse(MAT[,2]==1,MAT[,2]==1,MAT[,1]==1))
t4 t5 t6 t7 t8 t3 t1 t2 t9 t10
TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE
> ifelse(MAT[,3]==1,c(0.5,0.5,0),MAT)
t4 t5 t6 t7 t8 t3 t1 t2 t9 t10
0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.5 0.5
> ifelse(MAT[,1:3]==c(0,0,1),MAT[,1:3]==c(0.5,0.5,0),MAT)
a b c
t4 0.0 1.0 0
t5 1.0 0.0 0
t6 0.0 1.0 0
t7 0.0 1.0 0
t8 0.0 0.0 0
t3 0.0 1.0 0
t1 1.0 0.0 0
t2 0.0 0.0 0
t9 0.5 0.5 0
t10 0.5 0.5 0
私は最初の3列= 1かどうか、およびその0.5と行を交換する場合のためにチェックすることによって、働くだろうと思いました、 0.5,0.0、それを0にしない場合は、2番目は厄介だと思ったが、同じことを達成するかもしれない。最後は変更に成功しましたが、他のデータも削除しました。私はこの時点で、ifelseはこれについて行く方法ではないと推測していますが、それ以外の方法はわかりません。
ありがとうございます。
ありがとうございます!もう一つは私が必要としていたものです。 – Jeff
あなたは投票を望むかもしれません:-)、私はあなたに役立ってうれしいです! – Waqas
私はupvoteでした!しかし私は、評判が<15であるため、私の投票は公開されていないことに気付きました。 – Jeff