【问题标题】:How to summarise data with two data frames r如何用两个数据框r总结数据
【发布时间】: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/mcvestackoverflow.com/tags/r/info.)
  • 假设您知道 sql sintaxis,您可以使用 dplyr *_join() 函数之一连接表。但是您的示例对我来说并不清楚,因为您的汇总代码仅使用来自第二个数据帧的数据。例如,您可以阅读Relational Data chapter on R for Data Science 书籍。

标签: r date join dplyr jointable


【解决方案1】:

成功

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)),
                                            total = n())

非常感谢您的帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 2014-01-03
    • 2014-10-04
    • 1970-01-01
    相关资源
    最近更新 更多