如何从假人获得促销的开始和结束日期?

时间:2019-03-29 08:53:19

标签: r data-manipulation

我有以下数据框,其中包含日期序列和促销活动虚拟对象:

<init-param>
  <param-name>javax.ws.rs.Application</param-name>
  <param-value>cz.prg.rob.UserServiceApplication</param-value>
</init-param>

输出:

public class UserServiceApplication extends Application {
    public Set<Class<?>> getClasses() {
        Set<Class<?>> s = new HashSet<Class<?>>();
        s.add(UserService.class);
        return s;
    }
}

我需要为每个促销创建一个带有开始日期和结束日期的数据框。

所需的输出:

df = data.frame(date = seq(as.Date('2019-01-01'),as.Date('2019-01-10'), by =1), promotion = c(0,1,1,1,0,0,1,1,1,1))

我该如何实现?

2 个答案:

答案 0 :(得分:2)

我们可以创建一个group,每次促销未启用时递增(不等于1),然后仅保留具有promotion == 1的行,然后选择first和{{1 }}每个组的日期。

last

答案 1 :(得分:1)

我们可以使用data.table使用

library(data.table)
na.omit(setDT(df)[, {
    tmp = date[promotion == 1]
  .(promo_start = first(tmp), promo_end = last(tmp))
    }, rleid(promotion)])[, .(promo_start, promo_end)]
#   promo_start  promo_end
#1:  2019-01-02 2019-01-04
#2:  2019-01-07 2019-01-10