计算R中彼此相距10分钟的行数

时间:2018-02-07 12:35:06

标签: r datetime dplyr

我有一个交易表及其日期时间。我想在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))

这可以显示一系列访问的开始和结束,但是没有给我一个分隔它们并将它们分组的密钥。

欣赏任何提示/想法。

1 个答案:

答案 0 :(得分:0)

通常情况下,cumsum通常会在列中显示特定数据点与前一个数据点位于不同的组中时解决这些问题。

我进行了一些小的更改,即使用lastvisit代替nextvisitdifftime而不是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未定义。)