获取向量中缺少值的运行长度

daa*_*noo 4 r vector vectorization run-length-encoding na

什么是一个聪明的(即,不是循环)方式来获得向量中每个缺失值的长度?我的理想输出是一个长度相同的向量,其中每个缺失值被它所属的缺失值的法术长度替换,所有其他值都是0.

所以,对于像这样的输入:

x <- c(2,6,1,2,NA,NA,NA,3,4,NA,NA)
Run Code Online (Sandbox Code Playgroud)

我想输出像:

y <- c(0,0,0,0,3,3,3,0,0,2,2)
Run Code Online (Sandbox Code Playgroud)

jor*_*ran 9

一个简单的选项使用rle:

m <- rle(is.na(x))
> rep(ifelse(m$values,m$lengths,0),times = m$lengths)
[1] 0 0 0 0 3 3 3 0 0 2 2
Run Code Online (Sandbox Code Playgroud)

  • `rep(rle(is.na(x))$ value*rle(is.na(x))$ length,rle(is.na(x))$ length)`.这也有效. (2认同)