我有两张表,一张是销售历史,另一张是关键客户。

Sales History 表如下所示(包含 500,000 行):

Client No.   Transaction Date   Sales Amount
       abc          1/12/2014            100
       def          2/28/2014            200
       hij          3/01/2014            300
       abc          2/18/2014            400
       abc          5/26/2014            500
       xyz          7/15/2014            600
       def          8/23/2014            700
       hij          9/19/2014            800

关键客户表如下所示:
Client No.
       abc
       def
       xyz

现在我想用 R 做的是,基于 Key Clients 表,我需要创建一个与 Sales History 表中最早的 Sales Amount 匹配的新表。所需的结果如下所示:
Client No.  Earliest Sales Amount
       abc                    100
       def                    200
       xyz                    600

最佳答案

我还将推荐使用 data.table s binary join,但我会为此使用 .EACHI

library(data.table)
setkey(setDT(df)[, Transaction.Date := as.IDate(Transaction.Date, "%m/%d/%Y")], Client.No.)
df[key, .(Earliest.Sales.Amont = Sales.Amount[which.min(Transaction.Date)]), by = .EACHI]
#    Client.No. Earliest.Sales.Amont
# 1:        abc                  100
# 2:        def                  200
# 3:        xyz                  600

首先,我们将使用 df 将您的数据集 ( data.table ) 转换为 setDT 类,将 Transaction.Date 转换为 Date 类,以便 R 在查找最小日期时理解您的意思,然后通过 Client.No. 键入它以执行二进制连接(这对于像您这样的大数据集非常有效)。然后,在对键表 ( key ) 执行二进制连接时,我们将使用 by = .EACHI 来定位数据集中最早日期内的 Sale.Amount

关于r - 匹配并找到 R 中最早的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29488492/

10-12 23:31