R 在web访问会话中查找请求的页面对的时间差

R 在web访问会话中查找请求的页面对的时间差,r,dplyr,plyr,R,Dplyr,Plyr,我有一个数据帧的子集 lf = structure(list(session_id = c(48L, 48L, 48L, 48L, 48L, 48L, 54L, 54L, 54L, 54L, 54L, 54L, 72L, 72L, 72L, 72L, 72L, 74L, 74L, 74L, 74L, 74L, 78L, 78L, 78L, 78L, 78L, 90L, 90L, 90L), datetime = structure(c(1457050110, 1457050111, 145

我有一个数据帧的子集

lf = structure(list(session_id = c(48L, 48L, 48L, 48L, 48L, 48L, 54L, 
54L, 54L, 54L, 54L, 54L, 72L, 72L, 72L, 72L, 72L, 74L, 74L, 74L, 
74L, 74L, 78L, 78L, 78L, 78L, 78L, 90L, 90L, 90L), datetime = structure(c(1457050110, 
1457050111, 1457050112, 1457050114, 1457050117, 1457050118, 1457052045, 
1457052048, 1457052050, 1457052051, 1457052052, 1457052054, 1457057067, 
1457057067, 1457057067, 1457057070, 1457057071, 1457058143, 1457058143, 
1457058144, 1457058149, 1457058150, 1457059193, 1457059193, 1457059195, 
1457059198, 1457059199, 1457063485, 1457063486, 1457063486), class = c("POSIXct", 
"POSIXt"), tzone = "UTC"), request = c(7, 7, 14, 20, 9, 4, 9, 
1, 12, 20, 6, 12, 4, 15, 8, 8, 12, 10, 6, 6, 13, 1, 5, 6, 20, 
1, 8, 3, 6, 13)), .Names = c("session_id", "datetime", "request"
), row.names = c(NA, -30L), class = c("grouped_df", "tbl_df", 
"tbl", "data.frame"))
现在我想写一个函数,它将以一对请求(request1,request2)作为输入,并在上传所需输出时生成输出

我使用过此代码,但在查找时间差w.r.t位置索引时遇到了问题:-

lf1 = lf %>% group_by(session_id) %>% do(positions = match(c(1,6),.$request),session_duration = max(.$datetime)-min(.$datetime)) 
如您所见,我在上面的代码中使用了请求对(1,6)的一个实例,但希望编写一个函数来完成这项工作

期望输出:-
在给定的场景中,您不必担心明确的位置。仅考虑(a)会话内的范围和(b)会话内满足两个边界的情况

另外,要注意那些不小心被分组的藏品。在管道/链结束之前,我总是尝试
ungroup()

lf <- lf %>% 
  dplyr::ungroup()

lf %>% 
  dplyr::filter(request %in% c(1, 6)) %>%
  dplyr::group_by(session_id) %>% 
  dplyr::summarize(
    has_both_boundaries = (any(request==1) & any(request==6)),
    session_duration    = as.integer(difftime(max(datetime), min(datetime), units="secs"))
  ) %>% 
  dplyr::ungroup() %>% 
  dplyr::filter(has_both_boundaries) %>%
  dplyr::select(-has_both_boundaries) %>% 
  dplyr::right_join(
    lf %>% 
      dplyr::distinct(session_id),
    by = "session_id"
  )
lf%
dplyr::ungroup()
低频%>%
dplyr::筛选器(请求%在%c(1,6))中%>%
dplyr::分组依据(会话id)%>%
dplyr::总结(
具有两个边界=(任意(请求==1)和任意(请求==6)),
会话持续时间=as.integer(difftime(max(datetime),min(datetime),units=“secs”))
) %>% 
dplyr::解组()%>%
dplyr::筛选器(具有两个\u边界)%>%
dplyr::select(-具有两个边界)%>%
dplyr::右键连接(
低频%>%
dplyr::distinct(会话id),
by=“session\u id”
)
产生:

# A tibble: 6 x 2
  session_id session_duration
       <int>            <int>
1         48               NA
2         54                4
3         72               NA
4         74                7
5         78                5
6         90               NA
#一个tible:6x2
会话\u id会话\u持续时间
148 NA
2         54                4
372NA
4         74                7
5         78                5
690NA

会话48、72和90是否需要这些空行?如果没有,省略结束语
right\u join()
子句。

接受你的答案。但是我也对在不同变量中得到的位置感兴趣。在不同变量中得到什么?时间值还是会话ID?考虑一下这可能是一个不同的帖子。实际上,我有一个公式来计算页面连接,在其中我使用那些在会话中找到匹配的位置。这将是另一个帖子。好的,谢谢你!