R - 发现在与另一个观察的时间接近时发生的观察的发生

时间:2018-01-09 16:36:43

标签: r date time dplyr tidyverse

我有两个dfs,一个是通话日期和客户ID(日志),一个是有失效日期和客户ID(差距)。如何在任何客户的电话中找到该客户在接下来的两天,两周和两年内失效?

id =唯一客户ID

call_date = 1表示观察是一次呼叫

lapse_date = 1表示观察失效

{{1}}

我更喜欢在tidyverse工作,我可能会说出我的第一个出生的Hadley。

1 个答案:

答案 0 :(得分:2)

以下是我如何解决这个问题。

library(tidyverse)

logs %>%
    inner_join(gaps) %>% 
    mutate(days_diff = as.numeric(lapse_date - call_date)) %>%
    mutate(two_days = as.numeric(days_diff %in% 0:2),
           two_weeks = as.numeric(days_diff %in% 0:14),
           two_years = as.numeric(days_diff %in% 0:730)) %>%
    select(-lapse_date, -days_diff) %>%
    group_by(id, call_date) %>%
    summarise_all(max)

      id call_date  two_days two_weeks two_years
   <int> <date>        <dbl>     <dbl>     <dbl>
 1  4968 2014-02-07        0         0         0
 2  4968 2014-07-11        0         0         0
 3  4968 2014-08-15        0         0         0
 4  4968 2014-10-24        0         0         0

我们通过id加入,然后创建一个days_diff变量。之后我们创建三个指标变量来衡量日期差异,最后我们通过id和call_date取这三个指标变量的最大值。