我有一个交易表及其日期时间。我想在10分钟内计算一组访问次数。
input=
ID visitTime
1 11/10/2017 15:01
1 11/10/2017 15:02
1 11/10/2017 15:19
1 11/10/2017 15:21
1 11/10/2017 15:25
1 11/11/2017 15:32
1 11/11/2017 15:39
1 11/11/2017 15:41
此处,有一个群集从11/10/2017 15:01
开始,有2个相邻访问,一个在11/10/2017 15:19
上,有3次访问(11/10/2017
日期有2个群集)。 11/11/2017 15:32
上有另一个群集,有3个呼叫。提供下表。
output =
ID Date Cluster_count Clusters_with_3ormore_visits
1 11/10/2017 2 1
1 11/11/2017 1 1
我做了什么:
input %>% group_by(ID) %>% arrange(visitTime) %>%
mutate(nextvisit = lead(visitTime),
gapTime = as.numeric(interval(visitTime,nextvisit), 'minutes'),
repeated = ifelse(gapTime<= 10,1,0))
这可以显示一系列访问的开始和结束,但是没有给我一个分隔它们并将它们分组的密钥。
欣赏任何提示/想法。
答案 0 :(得分:0)
通常情况下,cumsum
通常会在列中显示特定数据点与前一个数据点位于不同的组中时解决这些问题。
我进行了一些小的更改,即使用lastvisit
代替nextvisit
和difftime
而不是interval
(不确定该函数来自何处)。
input %>% group_by(ID) %>% arrange(visitTime) %>%
mutate(lastvisit = lag(visitTime),
gapTime = as.numeric(difftime(visitTime, lastvisit, 'minutes')),
sameCluster = is.na(gapTime) | gapTime > 10,
cluster = cumsum(sameCluster))
(is.na(gapTime)
仅处理第一行,gapTime
未定义。)