在每一行中查找特定连续值的起始位置

时间:2018-06-19 13:53:02

标签: r apply

我是R的新手,并且仍在学习如何使用所有功能。我在我的项目中遇到了这个问题,所以一定会感谢您的帮助!

我具有从1月到12月的客户1、2、3和4的支出行为数据。每一行都是唯一的客户,每一列都是该月该客户的支出活动(1处于活动状态,0处于非活动状态) )。

+------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
|    Name    | Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec |
+------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
| Customer 1 |   1 |   1 |   0 |   1 |   1 |   0 |   0 |   0 |   1 |   1 |   0 |   1 |
| Customer 2 |   0 |   0 |   0 |   1 |   1 |   0 |   1 |   1 |   0 |   0 |   0 |   1 |
| Customer 3 |   1 |   1 |   1 |   0 |   1 |   1 |   0 |   1 |   0 |   0 |   0 |   0 |
| Customer 4 |   1 |   1 |   1 |   0 |   1 |   1 |   0 |   1 |   0 |   0 |   1 |   0 |
+------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+

我试图在每行中找到3个连续零的“最后一次”出现(如果有的话),并找到它们的起点。这可以帮助我确定客户何时进入“空闲”或“休眠”状态。

预期结果将是:

Jun (or 6 as column index) for Customer 1
Sep (or 9 as column index) for Customer 2
Oct (or 10 as column index) for Customer 3, since the last 3-month occurrence begins at Oct instead of Sep
NA for Customer 4, since there's no such an occurrence

经历了关于stackoverflow的一些类似问题之后,我认为使用rle和apply可能是正确的方法,但是我一直在努力将其写入实际代码中。衷心感谢任何想法!

1 个答案:

答案 0 :(得分:0)

我将融化数据框,因此共有3列: 名称,月份,支出行为。 然后,我将从zoo包中进行一次rollmean运算,并使其左对齐,其中rollmean为0的实例的子集,然后为每个客户选择最后一个观察值。