查找时间差
问题描述:
我有一个数据帧查找时间差
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,请求2)的这个子集输入和因为我上传所需的输出PIC
我已经使用这个代码,但在寻找的时间差异WRT位置索引stucked产生输出: -
lf1 = lf %>% group_by(session_id) %>% do(positions = match(c(1,6),.$request),session_duration = max(.$datetime)-min(.$datetime))
正如你SE EI参加了上述代码的要求对(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"
)
产地:
# 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
你需要的会话48,72,90 &这些空行?如果没有,则省略结束right_join()
条款。
接受你的答案..但我也是如果在某种程度上我们得到他们在单独变量的位置。 – SumitArya
获取单独的变量?时间值或会话ID?考虑一下,如果这可能是一个不同的职位。 – wibeasley
其实我有一个计算页面连接的公式,在这个公式中我使用了我们在会话中找到匹配的位置。这是另一篇文章。好,谢谢! – SumitArya