R:在向量中的旧零之后添加零?

ska*_*kan 0 r vector zero

想象一下,我有一个带有1和0的向量

我紧凑地写它:

1111111100001111111111110000000001111111111100101

我需要获得一个新的向量,将零后的"N"替换为新的零.

例如,对于N = 3.

1111111100001111111111110000000001111111111100101成为1111111100000001111111110000000000001111111100000

我可以用for循环来做,但我读过这不是一个好习惯,我怎么能这样做呢?

干杯

我的矢量确实是一个动物园系列,但我想它没有任何区别.如果我想要零结束,我会使用cumprod.

Jon*_*ang 5

你也可以这样做rle.您需要做的就是将n添加到值为0的所有长度,并在值为1时减去n(当一行中少于n个时稍微小心).(使用Greg的方法构建样本)

rr <- rle(tmp)
## Pad so that it always begins with 1 and ends with 1
if (rr$values[1] == 0) {
   rr$values <- c(1, rr$values)
   rr$lengths <- c(0, rr$lengths)  
}
if (rr$values[length(rr$values)] == 0) {
  rr$values <- c(rr$values, 1)
  rr$lengths <- c(rr$lengths, 0)  
}
zero.indices <- seq(from=2, to=length(rr$values), by=2)
one.indices <- seq(from=3, to=length(rr$values), by=2)
rr$lengths[zero.indices] <- rr$lengths[zero.indices] + pmin(rr$lengths[one.indices], n)
rr$lengths[one.indices] <- pmax(0, rr$lengths[one.indices] - n)
inverse.rle(rr)
Run Code Online (Sandbox Code Playgroud)