我有两张表,一张是销售历史,另一张是关键客户。
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/