【发布时间】:2019-02-15 21:07:45
【问题描述】:
我有两个数据框。第一个有客户的 id、姓名和地址。第二个包含您的所有交易(价值、购买日期、现金或信用卡...)。
str(data.frame_1)
Classes ‘data.table’ and 'data.frame': 201917 obs. of 5 variables:
$ clie_id : chr "C_ID_97" "C_ID_3f" "C_ID_dd" "C_ID_11" ...
$ address_1 : int 5 4 2 4 1 4 3 3 2 2 ...
$ salary : int 2 1 2 3 3 2 2 2 1 2 ...
$ gender : int 1 0 0 0 0 0 1 1 0 0 ...
$ have_kids : num -0.82 0.393 0.688 0.142 -0.16 ...
str(data.frame_2)
$ clie_id : chr "C_ID_00007093c1" "C_ID_00007093c1" "C_ID_00007093c1" "C_ID_00007093c1" ...
$ city : int -1 -1 -1 -1 76 76 76 76 76 244 ...
$ purchase_date : Date, format: "2012-06-14" "2013-08-01" "2013-09-08" "2013-10-28" ...
$ state : int -1 -1 -1 -1 2 2 2 2 2 2 ...
$ sector : int 8 8 8 8 33 33 33 33 1 34 ...
$ category : chr "Y" "Y" "Y" "Y" ...
$ purchase_amount : num -0.729 -0.709 -0.721 -0.672 -0.672 ...
我需要在日期框架 1 中添加的变量:最早的日期、较低的购买价值、较高的购买价值、平均购买价值、购买数量(在这种情况下是第二个中每个 id 的行数数据框)。
我尝试创建第三个日期框架,然后使用 clie_id 作为参考将第一个日期框架的列与第三个日期框架的列合并。所以我这样做了:
total_data_summarise_by_id <- data.frame_2 %>%
group_by(clie_id) %>%
summarise(first_date = min(purchase_date),
min_purchase_amount = min(purchase_amount),
max_purchase_amount = max(purchase_amount),
mean_purchase_amount = mean(purchase_amount))
但是,R 只返回了一个答案行。他没有对每个id进行总结。
我该如何加入?
【问题讨论】:
-
在您的示例数据中,
clie_id都不重合,因此此联接将为空。这是你的意思吗?如果没有,您能否提供实际匹配的样本数据?此外,如果您的数据采用可消耗格式,例如dput(x)的输出,其中x是一个代表性采样,这样(在这种情况下)两个帧有一些共同的ID,这将有很大帮助。请不要整帧。 -
第一个数据框有cli_id列作为主键。第二个数据框有相同的列,其中记录重复了几个,因此需要汇总数据。我已经用我目前能够产生的内容编辑了这个问题。
-
或许有误会。
"C_ID_00007093c1"和"C_ID_97"是同一个人和 id 吗?如果是这样,那如何推断呢?如果不是,那么您打算如何将第 2 帧中的记录与第 1 帧中的记录匹配?如果您将前几行的预期输出包括在内,这可能对我们双方都有帮助。 (顺便说一句:我仍然无法轻松地按原样复制您的数据。str可用于显示框架的基本结构,但我无法将其复制到控制台并使用它。请参阅:@ 987654321@、stackoverflow.com/help/mcve 和 stackoverflow.com/tags/r/info.) -
假设您知道 sql sintaxis,您可以使用 dplyr
*_join()函数之一连接表。但是您的示例对我来说并不清楚,因为您的汇总代码仅使用来自第二个数据帧的数据。例如,您可以阅读Relational Data chapter on R for Data Science 书籍。
标签: r date join dplyr jointable