【发布时间】:2015-03-31 16:20:40
【问题描述】:
我有以下示例数据框:
x
date product release
2012-01-01 A 0
2012-01-02 A 0
2012-01-03 A 0
2012-01-04 A 1
2012-01-05 A 0
2012-01-06 A 0
2012-01-07 A 0
2012-01-08 A 0
2012-01-09 A 0
2012-01-10 A 0
2012-01-11 A 0
2012-01-12 A 0
2012-01-01 Z 0
2012-01-02 Z 1
2012-01-03 Z 0
2012-01-04 Z 0
2012-01-05 Z 0
2012-01-06 Z 0
2012-01-07 Z 0
我想遍历每一行并根据 从发布到现在已经有多少天了。
要记住的几件事:
- 新产品发布 = 1 没有产品发布 = 0
- 输出必须是唯一的日期和产品
期望的输出是:
x
date product release dayssince
2012-01-01 A 0 0
2012-01-02 A 0 0
2012-01-03 A 0 0
2012-01-04 A 1 1
2012-01-05 A 0 2
2012-01-06 A 0 3
2012-01-07 A 0 4
2012-01-08 A 0 5
2012-01-09 A 0 6
2012-01-10 A 0 7
2012-01-11 A 0 8
2012-01-12 A 0 9
2012-01-01 Z 0 0
2012-01-02 Z 1 1
2012-01-03 Z 0 2
2012-01-04 Z 0 3
2012-01-05 Z 0 4
2012-01-06 Z 0 5
2012-01-07 Z 0 6
我已经尝试了从 ifelse 语句和 for 循环到 ddply 的所有我能想到的东西。
我能够解决问题的最简单方法是在概念上执行以下操作:
x$dayssince <- ifelse(x$release > 0, 1, 0)
- 然后在几天后检查每一行。
- 如果 dayssince == 1,那么 1
- 如果 dayssince
- 如果上面的行 > 0 ,则使用上面的行的值 + 1
- 所有这些都是产品独有的。
提前谢谢你!
更新/澄清:
对于每年发布多次的相同产品,我希望获得自上次发布以来的天数。
例如:
x
date product release dayssince
2012-01-01 A 0 0
2012-01-02 A 0 0
2012-01-03 A 0 0
2012-01-04 A 1 1
2012-01-05 A 0 2
2012-01-06 A 0 3
2012-01-07 A 0 4
2012-01-08 A 0 5
2012-01-09 A 0 6
2012-01-10 A 1 1
2012-01-11 A 0 2
2012-01-12 A 0 3
2012-01-13 A 0 4
2012-01-14 A 0 5
等等... 感谢@DMC的旗帜
【问题讨论】:
标签: r row conditional plyr