使用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