R基于标准的ROWMAX

R基于标准的ROWMAX,r,max,row,R,Max,Row,这里有四个可能的评分选项:1、2、3、4 如果任何“分数”等于3,则所有后续分数均等于3,除非有4。例如:1232应该改为1233。3 2 3 4应改为3 3 4 我尝试对ROWMAX执行此操作,但问题是有一个4,因此如果有一个4,它会将值设置为4。我们需要cummax,并假设这是一般性的 data=data.frame("id"=c(1,2,3,4), "score1"=c(1,1,2,1), "score2"=c(1,2,3,3), "score3"=c(2,3,1,1), "score4"

这里有四个可能的评分选项:1、2、3、4

如果任何“分数”等于3,则所有后续分数均等于3,除非有4。例如:1232应该改为1233。3 2 3 4应改为3 3 4


我尝试对ROWMAX执行此操作,但问题是有一个4,因此如果有一个4,它会将值设置为4。

我们需要
cummax
,并假设这是一般性的

data=data.frame("id"=c(1,2,3,4),
"score1"=c(1,1,2,1),
"score2"=c(1,2,3,3),
"score3"=c(2,3,1,1),
"score4"=c(3,4,4,2),
"score1WANT"=c(1,1,2,1),
"score2WANT"=c(1,2,3,3),
"score3WANT"=c(2,3,3,3),
"score4WANT"=c(3,4,4,3))

data[2:5]是否需要使用'WANT'作为单独的列“后缀或更新原始id如果id的分数为1,2,1,1怎么办?”?您想更改该id的分数吗?如果是1,2,1,1,它可以保持这种状态。唯一的修改是,如果有一个分数等于3,它将保持这种状态,除非它是4。如果有像5或6这样的值,它真的很好,谢谢!我试过了,但它需要1,2,1,3,然后把它变成1,2,2,3,但我只想做这样一件事,值为'3'。这有意义吗?有没有一种方法可以在仅适用于某些值的情况下使用cummax?所以1,2,1,3保持为1,2,1,3,但1,2,3,1变为1,2,3,3。
data[2:5] <- t(apply(data[2:5], 1, cummax))
data[2:5] <- t(apply(data[2:5], 1, function(x) {
      i1 <- which(x == 3)
      i2 <- which(x == 4)
     if(length(i2) > 0) replace(x, i1:(i2-1), 3) else replace(x, i1:length(x), 3)}))