1

我有一个 xts 对象,它只包含 1 和 0,但主要是零,我想知道是否有一种智能/有效的方法来计算两个 1 之间的行数(而不是天数)

以及对象外观的一部分示例...

                x1
2012-12-13       0
2012-12-14       0
2012-12-17       0
2012-12-18       1
2012-12-19       0
2012-12-20       0
2012-12-21       0
2012-12-24       0
2012-12-26       0
2012-12-27       0
2012-12-28       0
2012-12-31       0
2013-01-02       0
2013-01-03       0
2013-01-04       0
2013-01-07       0
2013-01-08       0
2013-01-09       0
2013-01-10       0
2013-01-11       0
2013-01-14       0
2013-01-15       1
2013-01-16       0
2013-01-17       0
2013-01-18       0
2013-01-22       0
2013-01-23       0
2013-01-24       0
2013-01-25       0
2013-01-28       0
2013-01-29       0

基本上我想在 2012 年 12 月 19 日至 2013 年 1 月 15 日的 1 和 0 旁边有一个向量/xts 对象,其编号为 18,因为在示例中的两个 1 之间有 18 行......还有更多1s 和 0s 你去的时间越早......但基本上希望看到,对于每一天,vector/xts 列的值将是直到下一个 1 的行数......我希望说得通?所以像这样的东西..

                x1   x2
2012-12-13       0   19
2012-12-14       0   19
2012-12-17       0   19
2012-12-18       1   19
2012-12-19       0   18
2012-12-20       0   18
2012-12-21       0   18
2012-12-24       0   18
2012-12-26       0   18
2012-12-27       0   18
2012-12-28       0   18
2012-12-31       0   18
2013-01-02       0   18
2013-01-03       0   18
2013-01-04       0   18
2013-01-07       0   18
2013-01-08       0   18
2013-01-09       0   18
2013-01-10       0   18
2013-01-11       0   18
2013-01-14       0   18
2013-01-15       1   18
2013-01-16       0   20
2013-01-17       0   20
2013-01-18       0   20
2013-01-22       0   20
2013-01-23       0   20
2013-01-24       0   20
2013-01-25       0   20
2013-01-28       0   20
2013-01-29       0   20

ETC...

4

1 回答 1

3

这是一种方法:

object$x2 <- ave(object$x1, cumsum(object$x1), FUN=nrow)

但我看到你想在组中包含右侧间隔,而不是左侧,所以你需要这样做:

object$x2 <- ave(object$x1, rev(cumsum(rev(object$x1))), FUN=nrow)
于 2013-01-30T12:40:53.450 回答