有条件的日期滞后

时间:2018-07-14 13:22:34

标签: r time-series

我对是否应邀捐款的个人进行了反复测量。我希望我可以将最后一次成功的征集日期延续到下一次观察中,直到获得新的成功。

这是我的示例数据:

set.seed(13)
df <- data.frame(ID=rep(letters[1:3], each=4), 
             SolicitationDate= sample(seq(as.Date('2016/01/01'), 
as.Date('2018/01/01'), by="day"), 3),
             Success=rbinom(4,1,0.2))

df$ExpectedResult <- c(NA, NA, "2016-06-28", "2016-06-28",
                NA, NA, "2016-10-11", "2016-10-11",
                NA,NA,"2017-06-03", "2017-06-03")

如果一个人获得了多次成功,那么最后的成功日期应该保留下来。

谢谢 罗曼(Romain)

1 个答案:

答案 0 :(得分:0)

这是使用tidyverse的版本。我认为您的预期输出可能会关闭,因为日期应在ID中排序,但这可能是错误的。在这种情况下,请告诉我。

df %>% 
  group_by(ID) %>%    # Group by ID
  arrange(SolicitationDate) %>%     # Sort according to date
  mutate(res=replace(SolicitationDate, Success==0, NA)) %>%   # Create new value
  tidyr::fill(res)    # Fill down 

这会给你

# A tibble: 12 x 4
# Groups:   ID [3]
   ID    SolicitationDate Success res       
   <fct> <date>             <int> <date>    
 1 a     2016-06-28             1 2016-06-28
 2 a     2016-10-11             0 2016-06-28
 3 a     2017-06-03             0 2016-06-28
 4 a     2017-06-03             0 2016-06-28
 5 b     2016-06-28             0 NA        
 6 b     2016-06-28             0 NA        
 7 b     2016-10-11             1 2016-10-11
 8 b     2017-06-03             0 2016-10-11
 9 c     2016-06-28             0 NA        
10 c     2016-10-11             0 NA        
11 c     2016-10-11             0 NA        
12 c     2017-06-03             1 2017-06-03

我不确定您是否希望成功日期成为结果的一部分。如果不是,那么您可以设置为丢失并再次填写。无论如何:希望这会有所帮助。