r语言 - 如何按日期顺序创建结果的运行计数,并且对特定的人/ID唯一



我有一个在一年内(1月至12月)进行交易的唯一客户列表。他们用三种不同的方式购买产品(信用卡、现金、支票)。我的目标是建立一个多分类模型来预测支付方式。

要做到这一点,我正在将一些近因和频率特征设计到我的训练数据中,但是我遇到了以下频率计数的麻烦,因为我知道如何做到这一点的唯一方法是在Excel中使用Countifs和SUMIFs函数,这是缓慢的。如果有人能帮助和/或提出另一个解决方案,我将不胜感激。

因此,我有一个具有3列(客户ID、购买日期和付款类型)的数据集,该数据集按购买日期和客户ID排序。然后如何按日期获得付款类型的先前频率计数,该计数不包括当前行事务计数或> Purchase date的任何未来事务计数。所以基本上,我想基于唯一的客户ID和日期范围<该培训行的购买日期。在我的脑海里,我把它看作是在交易和计数中"爬行"。下面是简化的数据帧截图,其中包含我希望以编程方式生成的3个先前计数列。>

截图

这将以CustomerID、PurchaseDate、PaymentMethod和先前计数的列表形式给出答案

SELECT CustomerID, PurchaseDate, PaymentMethod,
           (
           select count(CustomerID) from History T
           where
                 T.CustomerID=History.CustomerID
                 and T.PaymentMethod=History.PaymentMethod
                 and T.PurchaseDate<History.PurchaseDate
           )
          AS PriorCount
FROM History;

您可以保存此查询并将其用作交叉表查询的源,以获得所需的列格式

一些注意事项:

  • 我假设"History"作为源表名-您可以更改上面的查询以使用正确的源
  • 要使用此查询,请在设计视图中打开一个新查询。关闭询问要在哪些表上构建查询的窗口。打开类似查询设计的设计视图的SQL视图,但它显示的是SQL而不是普通的设计界面。将以上内容复制到SQL视图中。
  • 您现在应该能够切换到数据表视图并查看结果
  • 当查询工作满意时,用任何适当的名称保存它
  • 在设计视图中打开一个新查询
  • 当你得到要包含的表列表时,切换到查询列表并包含你刚刚保存的查询
  • 将查询类型更改为交叉表,并根据需要更新查询以选择行,列和值-如果需要更多帮助,请查找"访问交叉表查询"。

另一个提示,看看这里发生了什么:

  • 您可以获取子查询—上面()中的部分—并执行只将该语句放入它自己的查询中,不包括open()和closing()。然后你可以查看它的设计视图看看它是做什么的
  • 用一个合适的名称保存它,并把它放在上面的查询中,代替()中的语句——然后你就可以查看设计视图了。

有时候,用这种方式将两个查询串在一起比使用子查询更容易可视化和学习。

最新更新