【问题标题】:Count observations for each group within dynamic date-time range [closed]在动态日期时间范围内计算每个组的观察值[关闭]
【发布时间】:2018-12-14 07:32:21
【问题描述】:

数据如下:

Customer_ID    Trans_ID    Trans_DateTime
  A             1            2014-10-01 10:02:09
  A             2            2014-10-01 16:20:09
  B             3            2014-10-01 12:05:20
  B             4            2014-10-01 17:05:20
  A             5            2014-12-01 10:02:09
  A             6            2014-12-01 10:02:50
  B             7            2014-12-01 12:05:19
  B             8            2014-12-01 12:05:21

我需要计算每个客户在第一次交易后的两个月内的交易次数。我只能找到所有客户在接下来的两个月内的交易次数。对所有人来说都是共同的。但是,我需要使时间段成为动态的(即,每个客户根据他们进行第一笔交易的时间而有所不同。)

根据上面的数据,输出应该如下所示:

Customer_ID  number_of_transactions
 A           2
 B           3

提前致谢!!

【问题讨论】:

  • 您能dput(...)您的示例数据吗?根据标签 [r] 的描述:提供最小的、可重复的、有代表性的示例以及所需的最终结果。对数据使用 dput() 并指定所有非基础包 ...
  • 你能解释一下你的预期输出吗?每个Cust_ID 的所有交易都在他们第一次交易后的 3 个月内。
  • @RonakShah 考虑到 A 的交易,我没有计算数据中给出的 A 的最后一笔交易,因为它发生在“2014-12-01 10:02:09”之后。她的第一笔交易在“2014-10-01 10:02:09”完成,3 个月约束内的最后一次观察在“2014-12-01 10:02:09”完成,这是 3 个月的“窗口” " 特定于我的问题中定义的 A。
  • @KumarAshutosh 所以我认为那是 2 个月的窗口吗? B 呢?它在同一个月内完成了所有交易,实际上是同一天。
  • @RonakShah 感谢您的更正...那么您能否将此问题视为基于 2 个月窗口的问题?同样对于 B,我应该将最后两笔交易的月份设为 12 而不是 10。原谅我。

标签: r datetime dplyr lubridate


【解决方案1】:

使用dplyrlubridate。对于每个Customer_ID,我们找到minimum Trans_DateTime(第一次交易)并添加2个月和filter在该窗口中发生的所有交易和count它们的发生。

library(dplyr)
library(lubridate)

df %>%
   group_by(Customer_ID) %>%
   mutate(Trans_DateTime = ymd_hms(Trans_DateTime)) %>%
   filter(Trans_DateTime < (min(Trans_DateTime) + months(2))) %>%
   count()


#   Customer_ID   n
#    <chr>       <int>
#1     A           2
#2     B           3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 2023-01-15
    • 1970-01-01
    相关资源
    最近更新 更多