R:在不到x分钟内计算出现次数

时间:2018-02-12 21:52:42

标签: r date

我正在从csv文件中读取CRM(操作)中的DDBB,它看起来像这样:

OP_ID   CRD_NO    TRN_DATE
1       2189761   04/01/18  13:19:00
2       2189761   04/01/18  13:33:00
3       2189761   04/01/18  19:25:00
4       97429     02/01/18  13:46:00
5       97429     02/01/18  19:42:00
6       20390     04/01/18  13:16:00
7       20390     04/01/18  18:32:00
8       20390     05/01/18  20:16:00
9       20390     05/01/18  10:55:00
10      673863    04/01/18  12:27:00
11      673863    04/01/18  18:43:00
12      673863    04/01/18  19:11:00

现在我需要添加一个新列以包含一个标志,对于相同的CRD_NO至少(K)在同一天发生的操作次数,但它们的发生差异为(J)分钟。

对于这个例子,假设有必要至少3次操作相差10分钟

然后,输出应为:

OP_ID   CRD_NO    TRN_DATE              FLAG
1       2189761   04/01/18  13:19:00     1
2       2189761   04/01/18  13:33:00     1
3       2189761   04/01/18  19:25:00     1
4       97429     02/01/18  13:46:00     0
5       97429     02/01/18  19:42:00     0
6       20390     04/01/18  13:16:00     0
7       20390     04/01/18  18:32:00     0
8       20390     05/01/18  20:16:00     0
9       20390     05/01/18  10:55:00     0
10      673863    04/01/18  12:27:00     1
11      673863    04/01/18  18:43:00     1
12      673863    04/01/18  19:11:00     1 

我是R的新手,我使用了太多的循环(就像之前我在Matlab中所做的那样)。

1 个答案:

答案 0 :(得分:1)

使用dplyr

library(dplyr)
your_data %>% 
mutate(timestamp = strptime(paste(CRD_NO, TRN_DATE), format = "%m/%d/%y %H:%M:%S"))
group_by(CRD_NO, TRN_DATE) %>%
mutate(FLAG = as.integer(
         n() > 3 &
         (max(timestamp) - min(timestamp) > 10 * 60)))

我们将您的timstamps转换为实际的日期时间类,以便我们可以减去它们,按ID和日期分组,并使用简单的条件。

请注意,“相差10分钟”有点模糊。我把它解释为“第一次和最后一次之间的差异至少是10分钟”。