计算日期差异

时间:2017-04-13 19:58:29

标签: r date

我对R比较陌生,我希望有人能为我回答这个问题。我在数据框proc_id,mco_id,start_date和end_date中有四列。 PLEASE CLICK ON THIS IMAGE TO SEE THE DATAFRAME. 这是我要追求的逻辑。对于proc_id和mco_id的每个组合,如果start_date恰好位于前一个end_date之后,则proc_id和mco_id组合的最终数据帧是最小开始日期和最大结束日期。

例如,前三行分别包含1234和ABC以及proc_id和mco_id。数据框第3行的开始日期是第2行结束日期后的第一天,第2行的开始日期是第1行结束日期后的第一天。因此,我的最终数据帧为proc_id,mco_id为1234和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 个答案:

答案 0 :(得分: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))

注意:我会花更多时间将您的图片转录为可读形式。请在将来提供可重复的示例。