在r中找到满足条件的先前日期

时间:2019-05-02 23:51:27

标签: r

我正在尝试使用lag函数来计算自开会以来的天数。我希望会议开始后的天数重置为0,然后从那一点开始计算会议开始的天数。在此方面的任何帮助将不胜感激。

Group_c                ActivityDate     meeting    days since meeting
003U000000Q6LlIIAV  1/1/2019    1   0
003U000000Q6LlIIAV  1/2/2019    0   1
003U000000Q6LlIIAV  1/3/2019    0   2
003U000000Q6LlIIAV  1/4/2019    0   3
003U000000Q6LlIIAV  1/5/2019    0   4
003U000000Q6LlIIAV  1/6/2019    0   5
003U000000Q6LlIIAV  1/7/2019    0   6
003U000000Q6LlIIAV  1/8/2019    0   7
003U000000Q6LlIIAV  1/9/2019    1   0
003U000000Q6LlIIAV  1/10/2019   0   1
003U000000Q6LlIIAV  1/11/2019   0   2
003U000000Q6LlIIAV  1/12/2019   0   3
003U000000Q6LlIIAV  1/13/2019   0   4


DSM <- DSM %>% 
  arrange(Group__c,ActivityDate) %>% 
  group_by(Group__c) %>% 
  mutate(DaysSinceMeeting=   ActivityDate-lag(ActivityDate[Meeting>0]))

1 个答案:

答案 0 :(得分:2)

我认为这里不需要lag,因为您对相对于初始日期(而不是连续日期)的日期差异感兴趣。这是使用difftime

的选项
df %>%
    group_by(Group_c) %>%
    mutate(MeetingGrp = cumsum(meeting)) %>%
    group_by(Group_c, MeetingGrp) %>%
    mutate(
        ActivityDate = as.Date(ActivityDate, format = "%m/%d/%Y"),
        DaysSinceMeeting = difftime(ActivityDate, first(ActivityDate), units = "days"))
## A tibble: 13 x 6
## Groups:   Group_c, MeetingGrp [2]
#   Group_c     ActivityDate meeting days.since.meet… MeetingGrp DaysSinceMeeting
#   <fct>       <date>         <int>            <int>      <int> <time>
# 1 003U000000… 2019-01-01         1                0          1 0 days
# 2 003U000000… 2019-01-02         0                1          1 1 days
# 3 003U000000… 2019-01-03         0                2          1 2 days
# 4 003U000000… 2019-01-04         0                3          1 3 days
# 5 003U000000… 2019-01-05         0                4          1 4 days
# 6 003U000000… 2019-01-06         0                5          1 5 days
# 7 003U000000… 2019-01-07         0                6          1 6 days
# 8 003U000000… 2019-01-08         0                7          1 7 days
# 9 003U000000… 2019-01-09         1                0          2 0 days
#10 003U000000… 2019-01-10         0                1          2 1 days
#11 003U000000… 2019-01-11         0                2          2 2 days
#12 003U000000… 2019-01-12         0                3          2 3 days
#13 003U000000… 2019-01-13         0                4          2 4 days

说明:我们为每个以MeetingGrp开头的日期创建一个组标签meeting == 1;然后将Group_cMeetingGrp分组,并使用difftime计算自第一次会议以来的天数。


样本数据

df <- read.table(text =
    "Group_c                ActivityDate     meeting    'days since meeting'
003U000000Q6LlIIAV  1/1/2019    1   0
003U000000Q6LlIIAV  1/2/2019    0   1
003U000000Q6LlIIAV  1/3/2019    0   2
003U000000Q6LlIIAV  1/4/2019    0   3
003U000000Q6LlIIAV  1/5/2019    0   4
003U000000Q6LlIIAV  1/6/2019    0   5
003U000000Q6LlIIAV  1/7/2019    0   6
003U000000Q6LlIIAV  1/8/2019    0   7
003U000000Q6LlIIAV  1/9/2019    1   0
003U000000Q6LlIIAV  1/10/2019   0   1
003U000000Q6LlIIAV  1/11/2019   0   2
003U000000Q6LlIIAV  1/12/2019   0   3
003U000000Q6LlIIAV  1/13/2019   0   4", header = T)