R-查找与另一个观测值在时间上接近的观测值

R-查找与另一个观测值在时间上接近的观测值,r,date,time,dplyr,tidyverse,R,Date,Time,Dplyr,Tidyverse,我有两个dfs,一个是通话日期和客户ID(日志),一个是失效日期和客户ID(间隙)。对于任何客户的电话,我如何确定该客户是否在接下来的两天、两周和两年内发生了故障 id=唯一的客户id call_date=1表示观察为呼叫 失效日期=1表示观察结果为失效 logs <- structure(list(id = c(4968L, 4968L, 4968L, 4968L, 4968L, 4968L, 4968L, 4968L, 4968L, 4968L, 4968L, 4968L, 4968L

我有两个dfs,一个是通话日期和客户ID(日志),一个是失效日期和客户ID(间隙)。对于任何客户的电话,我如何确定该客户是否在接下来的两天、两周和两年内发生了故障

id=唯一的客户id

call_date=1表示观察为呼叫

失效日期=1表示观察结果为失效

logs <- structure(list(id = c(4968L, 4968L, 4968L, 4968L, 4968L, 4968L, 4968L, 4968L, 4968L, 4968L, 4968L, 4968L, 4968L, 4968L, 4968L, 4968L, 5818L, 5818L, 5818L, 5818L, 7118L, 7118L, 7118L, 7118L, 7118L, 7293L, 9451L, 9451L, 9793L, 9793L, 9793L, 9793L, 9793L, 9793L, 9793L), call_date = structure(c(16108, 16262, 16297, 16367, 16414, 16465, 16612, 16661, 16738, 16769, 16829, 16982, 17032, 17112, 17200, 17347, 16174, 16174, 16174, 16174, 16212, 16232, 17242, 17242, 17245, 16084, 16301, 16301, 16020, 16133, 16414, 16657, 16899, 17227, 17228), class = "Date")), class = "data.frame", row.names = c(NA, -35L), .Names = c("id", "call_date"))
gaps <- structure(list(id = c(4968L, 5818L, 5818L, 5818L, 5818L, 5818L, 5818L, 5818L, 5818L, 5818L, 5818L, 5818L, 5818L, 5818L, 5818L, 5818L, 5818L, 5818L, 5818L, 5818L, 5818L, 5818L, 7118L, 7118L, 7118L, 7118L, 7293L, 9451L, 9451L, 9793L, 9793L, 9793L), lapse_date = structure(c(14910, 15329, 15394, 15516, 15649, 15775, 15915, 15976, 16066, 16134, 16199, 16272, 16431, 16542, 16637, 16722, 16789, 16917, 17084, 17144, 17224, 17308, 15085, 15331, 16041, 16637, 15533, 14764, 16195, 15405, 15534, 15749), class = "Date")), class = "data.frame", row.names = c(NA, -32L), .Names = c("id", "lapse_date"))

日志下面是我可能如何解决这个问题的方法

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
库(tidyverse)
日志%>%
内螺纹联接(间隙)%>%
变异(天数差异=数值(失效日期-调用日期))%>%
变异(两天=数值(天差%0:2),
两周=以数字形式表示(日差%0:14),
两年=以数字形式(天数差异%0:730))%>%
选择(-失效日期,-天数差异)%>%
分组人(id,呼叫日期)%>%
总结所有(最大值)
我打电话给你约会两天两周两年
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\u diff
变量。之后,我们创建了三个指标变量来测量日期差异,最后我们根据id取这三个指标变量的最大值并调用_date。

Dude!非常感谢。我确实需要向数据集中添加一个“call\u id”向量,每个调用都有一个id,这样我就可以按(id,call\u id)而不是call\u date对调用进行分组,从而不删除在同一日期发生的调用。。。但是我已经用了大约10个小时的时间在我的桌子上敲打我的头,试图弄明白这一点。很高兴我能帮上忙。添加
call\u id
听起来是个好主意