我对是否应邀捐款的个人进行了反复测量。我希望我可以将最后一次成功的征集日期延续到下一次观察中,直到获得新的成功。
这是我的示例数据:
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)
答案 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
我不确定您是否希望成功日期成为结果的一部分。如果不是,那么您可以设置为丢失并再次填写。无论如何:希望这会有所帮助。