我正在从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中所做的那样)。
答案 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分钟”。