2017-04-13 4 views
-1

저는 R에 비해 상대적으로 새롭고 누군가이 질문에 대답 할 수 있기를 희망합니다. proc_id, mco_id, start_date 및 end_date 데이터 프레임에 4 개의 열이 있습니다. PLEASE CLICK ON THIS IMAGE TO SEE THE DATAFRAME. 이것은 내가 수행 할 논리입니다. proc_id와 mco_id의 각 조합에 대해 start_date가 이전 end_date 바로 다음에 오는 경우 proc_id와 mco_id의 해당 조합에 대한 최종 데이터 프레임은 최소 시작 날짜와 최대 종료 날짜입니다.날짜 차이 계산

예를 들어 처음 세 행에는 proc_id와 mco_id에 대해 각각 1234와 ABC가 들어 있습니다. 데이터 프레임의 3 행의 시작 날짜는 2 행의 종료 날짜 이후 1 일이고 2 행의 시작 날짜는 1 행의 종료 날짜 이후 일입니다. 따라서, 1234의 proc_id 및 mco_id에 대한 최종 데이터 프레임 및 ABC는 시작 날짜가 '2014-01-01'이고 종료 날짜가 '2014-07-01'이어야합니다. 이제 proc_id와 mco_id의 조합 시작 날짜가 지연 종료 날짜의 1 일보다 길면 그대로 유지됩니다. 마지막으로, 시작 날짜가 지연 종료 날짜보다 앞서면 첫 번째 인스턴스와 유사하게 proc_id와 mco_id의 조합에 대한 최소 시작 날짜와 최대 종료 날짜가 고려됩니다. 최종 데이터 프레임에서 기대할 수있는 점은 다음과 같습니다.

This is the final data frame that I would like to get.

어떤 도움

주시면 감사하겠습니다.

+1

데이터 사진을 게시하지 마십시오. 질문 자체에 데이터를 포함시키는 더 좋은 방법에 대한 제안은 [재현 가능한 예제를 만드는 방법] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)을 참조하십시오. . – MrFlick

답변

0

여기 dplyr 패키지 빠른 솔루션입니다 :

df %>% 
    group_by(proc_id, mco_id) %>% 
    summarise(start=min(start_date), end = max(end_date)) 

Source: local data frame [4 x 4] 
Groups: proc_id [?] 

    proc_id mco_id  start  end 
    <fctr> <fctr>  <date>  <date> 
1 1234 ABC 2014-01-01 2014-07-01 
2 2345 DEF 2014-06-01 2014-07-31 
3 3456 ABC 2015-01-01 2015-03-30 
4 4567 ABC 2015-04-15 2015-04-30 

df 사용 :

df <- structure(list(proc_id = structure(c(1L, 1L, 1L, 2L, 2L, 3L, 
3L, 4L), .Label = c("1234", "2345", "3456", "4567"), class = "factor"), 
mco_id = structure(c(1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L), .Label = c("ABC", 
"DEF"), class = "factor"), start_date = structure(c(16071, 
16161, 16191, 16222, 16252, 16436, 16478, 16540), class = "Date"), 
end_date = structure(c(16160, 16190, 16252, 16251, 16282, 
16495, 16524, 16555), class = "Date")), class = "data.frame", .Names = c("proc_id", 
"mco_id", "start_date", "end_date"), row.names = c(NA, -8L)) 

참고 : 나는 읽을 수있는 형태로 이미지를 전사하기 위해 노력하고 더 많은 시간을 보낼 것입니다. 앞으로 재현 가능한 예를 제공해주십시오.