【发布时间】:2019-08-07 18:22:23
【问题描述】:
我有一个数据集,其中包含供应商 ID、买家 ID 和交易日期。这是一个示例数据集:
df= data.frame(supplier_id= c("176", "345", "343", "766", "766", "766", "278", "341", "341","890","789","687","787","787"), buyer= c("wang","cheng","li","cheng","cheng",
"cheng","li","wang","wang","Echo","Kelly","Kelly","cheng","cheng"), date=c("2/20/2018","2/26/2018",
"1/2/2019","4/10/2018","4/10/2018","4/10/2018","4/18/2018","4/18/2018","1/5/2019","2/23/2018","2/23/2018","6/29/2017","6/20/2017","5/11/2017"))
df$date=as.Date(df$date, format="%m/%d/%y")
这个问题有两个部分。这个问题的第一部分是以这样一种方式排列数据集,即我们将相同的买家和相同的供应商分组在一起,并按照买家姓名的升序排列,以及每个组的日期升序。然后数据将如下所示:
| supplier_id | Buyer | date |
|-------------|:-----:|----------:|
| 345 | cheng | 2/26/2018 |
| 766 | cheng | 4/10/2018 |
| 766 | cheng | 4/10/2018 |
| 766 | cheng | 4/10/2018 |
| 787 | cheng | 4/18/2018 |
| 787 | cheng | 4/18/2018 |
| | | |
| 890 | Echo | 6/29/2017 |
| | | |
| 789 | Kelly | 5/11/2017 |
| 687 | Kelly | 6/20/2017 |
| | | |
| 343 | li | 1/2/2019 |
| 278 | li | 1/5/2019 |
| | | |
| 176 | wang | 2/20/2018 |
| 341 | wang | 2/23/2018 |
| 341 | wang | 2/23/2018 |
问题的第二部分是识别在 5 天内发生的交易。因此,我们将创建一个新列,然后计算日期差异,新列的数据将是:
| supplier_id | Buyer | date | date_diff |
|-------------|:-----:|----------:|-----------|
| 345 | cheng | 2/26/2018 | 43 |
| 766 | cheng | 4/10/2018 | 0 |
| 766 | cheng | 4/10/2018 | 0 |
| 766 | cheng | 4/10/2018 | 8 |
| 787 | cheng | 4/18/2018 | 0 |
| 787 | cheng | 4/18/2018 | NA |
| | | | |
| 890 | Echo | 6/29/2017 | NA |
| | | | |
| 789 | Kelly | 5/11/2017 | 40 |
| 687 | Kelly | 6/20/2017 | NA |
| | | | |
| 343 | li | 1/2/2019 | 3 |
| 278 | li | 1/5/2019 | NA |
| | | | |
| 176 | wang | 2/20/2018 | 3 |
| 341 | wang | 2/23/2018 | 0 |
| 341 | wang | 2/23/2018 | NA |
然后,我需要选择所有在 5 天内有交易的日期。所以,这将是 date_diff
我尝试使用 group_by 和 mutate 对买家和供应商 ID 进行分组,然后创建一个新列来计算日期差异,但是我的代码没有给出所需的输出。
df1=df %>% group_by(buyer, supplier_id) %>%
mutate(diffdate= difftime(date,lag(date,1),units='days'))
我也可以使用“排列”功能,但这只会按升序排列数据集,而不是按采购商和供应商 ID 对数据进行分组来计算日期差异。
我的预期输出应该是:
| supplier_id | Buyer | date |
|-------------|-------|-----------|
| 766 | cheng | 4/10/2018 |
| 766 | cheng | 4/10/2018 |
| 766 | cheng | 4/10/2018 |
| 787 | cheng | 4/18/2018 |
| 787 | cheng | 4/18/2018 |
| | | |
| 343 | li | 1/2/2019 |
| 278 | li | 1/5/2019 |
| | | |
| 176 | wang | 2/20/2018 |
| 341 | wang | 2/23/2018 |
| 341 | wang | 2/23/2018 |
有人可以帮我解决这个问题吗?
【问题讨论】:
-
@kstew 但我需要先对买家和供应商 ID 进行分组,并且需要根据每个组分别计算日期差异。因此,例如在上述数据集中,每个买家组的日期应单独考虑,在计算日期差异时不应与其他组一起考虑。