R 延迟日期视情况而定,结转
我反复测量了那些在募捐时捐款或未捐款的个人。我希望我能把上一次成功的征集日期推迟到下一次观察,直到取得新的成功 以下是我的示例数据:R 延迟日期视情况而定,结转,r,time-series,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), Su
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")
set.seed(13)
df这里有一个使用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
#一个tible:12 x 4
#组别:ID[3]
ID请求日期成功率
1 a 2016-06-28 1 2016-06-28
2 a 2016-10-11 0 2016-06-28
3A 2017-06-03 0 2016-06-28
4 a 2017-06-03 0 2016-06-28
5b 2016-06-28 0北美
6 b 2016-06-28 0不适用
7 b 2016-10-11 1 2016-10-11
8 b 2017-06-03 0 2016-10-11
9 c 2016-06-28 0北美
10 c 2016-10-11 0北美
11 c 2016-10-11 0北美
12 c 2017-06-03 1 2017-06-03
我不确定你是否希望成功日期成为结果的一部分。如果没有,则可以设置为“缺少”,然后再次填充。无论如何,希望这能有所帮助