【问题标题】:Remove indicator regimes that are less than three periods删除少于三个时期的指标制度
【发布时间】:2015-11-28 06:05:23
【问题描述】:

我正在寻求解决以下问题的帮助。

假设我有一个指标变量:

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)

我们将不胜感激任何有助于实现这一动态的帮助!

网卡

【问题讨论】:

    标签: r loops dummy-variable


    【解决方案1】:

    我们可以使用rle 来执行此操作。我们得到'ind'的rle,通过将'lengths'子集为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
    

    【讨论】:

    • 对于代码打高尔夫球,请注意!!x &amp; y 与数字xx &amp; y 相同。
    猜你喜欢
    • 2019-06-26
    • 2016-10-16
    • 1970-01-01
    • 2017-05-04
    • 1970-01-01
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多