我正在寻求以下问题的帮助。
假设我有一个指标变量:
ind <- c(0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,1,1,1,1,0,0,0,1,1,0)
我的指标变量要长得多,所以这不是一个特定的问题。
我有兴趣编写一个执行以下操作的循环:
如果上面向量中1的连续值小于3,则保持为零。
即。我想删除频繁的政权转移,其中1只是1或2个时期。
因此,最终的载体应如下所示:
ind <- c(0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0)
任何有助于实现这种动态的帮助都将受到赞赏!
尼克
答案 0 :(得分:2)
我们可以使用rle
来执行此操作。我们得到'{1}}'ind',通过将'length'子集化为小于3的值(1 {rle
)来更改'values',将相应的'values'分配给0,并使用!!values
将输出转换回inverse.rle
。
vector
或更紧凑的版本
inverse.rle(within.list(rle(ind), values[!!values][lengths[!!values]<3] <- 0))
#[1] 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0