根据R代码中特定值的运行长度计算变量

Rud*_*o88 3 r run-length-encoding

我有这样的数据集,

 dat <- data.frame(d1=c(0,1,0,1,0),
      d2=c(0,1,1,1,0),d3=c(1,0,1,1,0),
      d4=c(1,0,0,0,0),d5=c(1,1,1,0,0))
 dat
  d1 d2 d3 d4 d5
1  0  0  1  1  1
2  1  1  0  0  1
3  0  1  1  0  1
4  1  1  1  0  0
5  0  0  0  0  0
Run Code Online (Sandbox Code Playgroud)

如果我认为每一行都是为个人设定的.我想基于run计算一个名为"indicator"的指标变量.例如,对于这个向后运行的长度,单个1运行是(0,0,1,1,1),其中值1是3.另一方面,对于个体3运行是(0,1,1,0, 1),向后运行长度值为1,s为1.所需数据集如下.

  d1 d2 d3 d4 d5 indicator
   0  0  1  1  1   3
   1  1  0  0  1   1
   0  1  1  0  1   1
   1  1  1  0  0   3 
   0  0  0  0  0   0
Run Code Online (Sandbox Code Playgroud)

我试过这种方式,

    indicator <- NULL      
    for(i in 1:5){
        indicator[i] <- rev(sequence(rle(dat[i,])$lengths))[1]
     }
    indicator[1:5]
   cbind(dat, indicator=indicator[1:5])
Run Code Online (Sandbox Code Playgroud)

但这会提供这样的数据,

  d1 d2 d3 d4 d5 indicator
1  0  0  1  1  1         3
2  1  1  0  0  1         1
3  0  1  1  0  1         1
4  1  1  1  0  0         2
5  0  0  0  0  0         5
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我解决这个问题吗?

akr*_*run 5

尝试

val <- apply(dat, 1, function(x) with(rle(rev(x)==1), lengths[values])[1])
dat$indicator <- replace(val, is.na(val),0)
dat
#   d1 d2 d3 d4 d5 indicator
#1  0  0  1  1  1         3
#2  1  1  0  0  1         1
#3  0  1  1  0  1         1
#4  1  1  1  0  0         3
#5  0  0  0  0  0         0
Run Code Online (Sandbox Code Playgroud)