阅读文档data.table
's mult
更仔细地说,它说:
When i
is a list
(or data.frame
or data.table
) 和多行x
与中的行匹配i
, mult
返回的控件:"all"
(默认),"first"
or "last"
.
所以如果有多行x
(“用户”)匹配i
(“交易”),那么mult
将返回第一行x
。但是,在您的情况下,中没有多行x
匹配到i
,而是有多行i
匹配到x
.
正如@Arun建议的,最好的选择是改变你的周围,这样mult = "first"
是相关的:
users[, FirstTransactionDate := transactions[users, TransactionDate, on="UserID", mult = "first"]]
users
# UserID User Gender Registered Cancelled FirstTransactionDate
#1: 1 Charles male 2012-12-21 <NA> 2012-08-26
#2: 2 Pedro male 2010-08-01 2010-08-08 2013-06-06
#3: 3 Caroline female 2012-10-23 2016-06-07 2011-05-26
#4: 4 Brielle female 2013-07-17 <NA> <NA>
#5: 5 Benjamin male 2010-11-25 <NA> <NA>
另一种选择是稍微改变你的合并:
users[transactions[,FirstTransactionDate := min(TransactionDate), by = UserID],
FirstTransactionDate := FirstTransactionDate, on="UserID"]
我只是在其中创建第一个交易日期transactions
数据集。这会被合并多次,但应该没问题,因为它始终是相同的值UserID
.