根据时间间隔汇总

Summarize based on time between

我正在尝试根据组内的时间间隔来汇总数据集。基本上我所拥有的是,就像这个例子,一个学生购买课程的数据集,课程有级别:1 到 5,每门课程大约 2 个月,学生可以只学习 1 到 5 的课程。我想分析当学生:

我的数据集示例是这样的:

> data

Student     Buy_Date      Course
A           01-01-2019    Level 1
A           01-03-2019    Level 2
A           01-05-2019    Level 3
A           01-07-2019    Level 4
B           01-01-2019    Level 1
B           01-03-2019    Level 2
B           01-09-2019    Level 3

我想要的结果是:

> Data_Result
    Student     First_Buy    First_Course   Last_Course   Stopped_Date   Continued?     Course_Continued      
    A           01-01-2019   Level 1        Level 4       01-07-2019     No             NA
    B           01-01-2019   Level 1        Level 2       01-03-2019     Yes            Level 3

我曾尝试搜索 this 之类的选项,但我没有更进一步:根据时间对组内的行进行排序并计算前一个之间的时间。但是在那之后我卡住了..有人可以帮助我吗?

这是一种获得预期输出的方法。这里的关键是计算两个日期之间的月数 (Diff_Months)。之后,可以总结每个变量。

library(tidyverse)
library(lubridate)

df %>% 
  group_by(Student) %>% 
  mutate(Buy_Date = dmy(Buy_Date),
         Diff_Months = abs((interval(Buy_Date, lag(Buy_Date, default = first(Buy_Date))) %/% months(1)))) %>% 
  summarise(First_Buy = first(Buy_Date),
            First_Course = first(Course),
            Last_Course = last(Course[Diff_Months <= 2]),
            Stopped_Date = Buy_Date[Course == Last_Course],
            Continued = ifelse(Last_Course == last(Course), "No", "Yes"),
            Course_Continued = ifelse(Continued == "Yes", last(Course), NA))

# A tibble: 2 x 7
  Student First_Buy  First_Course Last_Course Stopped_Date Continued Course_Continued
  <chr>   <date>     <chr>        <chr>       <date>       <chr>     <chr>           
1 A       2019-01-01 Level 1      Level 4     2019-07-01   No        NA              
2 B       2019-01-01 Level 1      Level 2     2019-03-01   Yes       Level 3         

数据

df <- read.table(header = T, text = "Student     Buy_Date      Course
A           01-01-2019    'Level 1'
A           01-03-2019    'Level 2'
A           01-05-2019    'Level 3'
A           01-07-2019    'Level 4'
B           01-01-2019    'Level 1'
B           01-03-2019    'Level 2'
B           01-09-2019    'Level 3'")