我正在尝试使用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]))
答案 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_c
和MeetingGrp
分组,并使用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)