【发布时间】:2019-12-20 17:03:50
【问题描述】:
我正在使用如下结构的数据框:
structure(list(Date = structure(c(1L, 2L, 3L, 1L, 2L, 3L, 4L,
5L, 1L, 2L), .Label = c("2010-02-01", "2010-03-01", "2010-04-01",
"2010-05-01", "2010-06-01"), class = "factor"), y = c(1, 1, 1,
2, 2, 2, 2, 2, 3, 3), binary = c(0, 0, 0, 0, 0, 0, 1, 1, 0, 1
)), class = "data.frame", row.names = c(NA, -10L))
Date y binary
1 2010-02-01 1 0
2 2010-03-01 1 0
3 2010-04-01 1 0
4 2010-02-01 2 0
5 2010-03-01 2 0
6 2010-04-01 2 0
7 2010-05-01 2 1
8 2010-06-01 2 1
9 2010-02-01 3 0
10 2010-03-01 3 1
我正在努力让每个组至少有四个连续的逐月观察,条件是一旦二进制假设组的 value = 1,它就会保持这种状态.结果应如下所示:
Date y binary
>1 2010-02-01 1 0
>2 2010-03-01 1 0
>3 2010-04-01 1 0
>4 2010-05-01 1 0
>5 2010-02-01 2 0
>6 2010-03-01 2 0
>7 2010-04-01 2 0
>8 2010-05-01 2 1
>9 2010-06-01 2 1
>10 2010-02-01 3 0
>11 2010-03-01 3 1
>12 2010-04-01 3 1
>13 2010-05-01 3 1
我为第一组 (y = 1) 创建了一个数据子集,下面的循环适用于此。
dt1 <- dt[1:3,]
maxdate<- 0
while(nrow(dt1) < 5){maxdate <- as.Date(dt1[nrow(dt1), 1]) %m+% months(1) ; dt1<- rbind(dt1, c(as.character(maxdate) , dt1[nrow(dt1),2], dt1[nrow(dt1),3]))}
但我不知道如何将此函数合并到像 dt %>% group_by(y) 这样的 dplyr 结构中。
我如何获得我的结果,最好使用 dplyr,如果可能,不重复 for 循环?(实际数据集非常大)。
【问题讨论】: