1
아래 data.frame이 있으며 각 company_id에 대해 30 일 간격으로 기간을 "축소"하는 기간을 "청크"합니다.dplyr 축소 기간
company_id startDate endDate
1 209952 2012-09-17 2012-10-17
2 209952 2012-10-17 2012-11-17
3 209952 2012-11-17 2012-12-17
4 209952 2012-12-17 2013-01-17
5 209952 2013-01-17 2013-02-17
6 209952 2013-02-17 2013-03-17
7 209952 2013-03-17 2013-04-17
8 209952 2013-04-17 2013-05-17
9 209952 2013-05-17 2013-06-17
10 209952 2013-06-17 2013-07-17
11 209952 2013-07-17 2013-08-17
12 209952 2013-08-17 2013-09-17
13 209952 2013-09-17 2013-10-17
14 209952 2013-10-17 2013-11-17
15 209952 2013-11-17 2013-12-17
16 209952 2013-12-17 2014-01-17
17 209952 2014-01-17 2014-02-17
18 209952 2014-02-12 2014-03-12
19 209952 2014-03-12 2014-04-12
20 209952 2014-04-12 2014-05-12
21 209952 2014-05-12 2014-06-12
22 209952 2014-06-12 2014-07-12
23 209952 2014-07-12 2014-08-12
24 209952 2014-08-12 2014-09-12
25 209952 2014-09-12 2014-10-12
26 209952 2014-10-12 2014-11-12
27 209952 2014-11-12 2014-12-12
28 209952 2014-12-12 2015-01-12
29 209952 2015-01-12 2015-02-12
30 209952 2015-02-12 2015-03-12
31 209952 2015-03-12 2015-04-12
32 209952 2015-04-13 2015-05-13
33 209952 2015-05-07 2016-05-07
34 209952 2015-05-07 2015-06-07
35 209952 2015-06-07 2015-07-07
36 209952 2015-07-07 2015-08-07
37 209952 2015-08-07 2015-09-07
38 209952 2016-05-07 2017-10-23
39 2802315 2012-10-19 2012-11-19
40 2802315 2012-11-19 2012-12-19
41 2802315 2012-12-19 2013-01-19
42 2802315 2013-01-19 2013-02-19
43 2802315 2013-02-19 2013-03-19
44 2802315 2013-03-19 2013-04-19
45 2802315 2013-04-19 2013-05-19
46 2802315 2013-05-19 2013-06-19
47 2802315 2013-06-19 2013-07-19
48 2802315 2013-07-19 2013-08-19
49 2802315 2013-08-19 2013-09-19
50 2802315 2013-09-19 2013-10-19
51 2802315 2013-10-19 2013-11-19
52 2802315 2013-11-18 2013-12-18
53 2802315 2013-12-18 2014-01-18
54 2802315 2014-01-18 2014-02-18
55 2802315 2014-02-18 2014-03-18
56 2802315 2014-03-18 2014-04-18
57 2802315 2014-04-18 2014-05-18
58 2802315 2014-09-29 2014-10-29
59 2802315 2014-10-29 2014-11-29
60 2802315 2015-04-22 2015-05-22
61 2802315 2015-05-21 2015-06-21
62 2802315 2015-06-23 2015-09-23
63 2802315 2015-07-23 2015-08-23
64 2802315 2015-11-23 2016-05-23
I는 다음 시도 :
test <- blocks %>%
filter(company_id %in% c(209952, 2802315)) %>%
arrange(company_id, startDate) %>%
group_by(company_id) %>%
mutate(
week = cumsum(startDate - lag(endDate, default = 0) > 30)
) %>%
group_by(company_id, week) %>%
summarize(
startDate = min(startDate),
endDate = max(endDate)
)
문제는 라인 간격 (1) 및 (2) 하나의 startDate = 그래서 2012년 9월 17일 및 endDate가 결합되어야한다는 것이다 = 2017-10-23 사이에 30 일 미만이 있기 때문에
company_id week startDate endDate
<dbl> <int> <date> <date>
1 209952 1 2012-09-17 2016-05-07
2 209952 2 2016-05-07 2017-10-23
3 2802315 1 2012-10-19 2014-05-18
4 2802315 2 2014-09-29 2014-11-29
5 2802315 3 2015-04-22 2015-09-23
6 2802315 4 2015-11-23 2016-05-23
내가 찾고 출력은
1 209952 1 2012-09-17 2016-10-23
2 2802315 1 2012-10-19 2014-05-18
3 2802315 2 2014-09-29 2014-11-29
4 2802315 3 2015-04-22 2015-09-23
5 2802315 4 2015-11-23 2016-05-23
테이블이 얼마나 되나요? 모든 원래 행의 시작일 - 종료일 기간은 1 개월입니까? –
@AlexP 아니요, 기간은 데이터 집합의 예를 들어 38, 62, 64와 같이 임의적 일 수 있습니다. –