使用RI有三列的矩陣中的數據,並且我想用前面兩列中的值替換前兩列中的值第三。如果第三列是'1',我想用0.5替換第一列和第二列中的值(第三列無關緊要,稍後我會放棄它),否則,我想讓它們保持原樣。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,我認爲第二個是笨拙的,但可能完成同樣的事情。最後一次成功完成了更改,但也取消了我想保留的其他數據。我在這一點上猜測,ifelse不是這樣做的方式,但我不知道該怎麼做。
在此先感謝。
謝謝!第二個正是我所需要的。 – Jeff
你可能想投票:-),我很高興它對你有用! – Waqas
我做了upvote!但是我注意到,因爲我的聲望<15,我的投票將不會公開顯示。 – Jeff