删除少于三个周期的指标制度
Remove indicator regimes that are less than three periods
我正在寻求有关以下问题的帮助。
假设我有一个指标变量:
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 或两个周期。
最终向量应如下所示:
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)
如能提供帮助,我们将不胜感激!
尼克
我们可以使用rle
来做到这一点。我们得到 'ind' 的 rle
,通过子集 'lengths' 小于 3 的值 1 (!!values
) 来更改 'values',分配相应的 'values' 到 0,并使用 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
或者更紧凑的版本是
inverse.rle(within.list(rle(ind), values[values & lengths<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
我正在寻求有关以下问题的帮助。
假设我有一个指标变量:
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 或两个周期。
最终向量应如下所示:
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)
如能提供帮助,我们将不胜感激!
尼克
我们可以使用rle
来做到这一点。我们得到 'ind' 的 rle
,通过子集 'lengths' 小于 3 的值 1 (!!values
) 来更改 'values',分配相应的 'values' 到 0,并使用 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
或者更紧凑的版本是
inverse.rle(within.list(rle(ind), values[values & lengths<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