我有以下数据框,其中包含日期序列和促销活动虚拟对象:
<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))
我该如何实现?
答案 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