首页 > 解决方案 > 创建具有多个对象和每个对象多个观察值的汇总数据集

问题描述

我有一个包含本地商店报告的数据集,其中每行都有一个客户的 ID、购买日期和每次购买的总价值。我想创建一个新图,其中对于每个客户 ID,我都有上个月的所有购买,甚至只是在我选择的日期范围内购买的样品。主要问题是某些客户可能每月购买一次,而其他客户可能每天都来 - 因此每个时间段的观察次数可能会有所不同。

我已经尝试将我的数据集子集到特定的时间范围内,但是要么我选择了一个特定的日期——然后我只得到了所有客户的一小部分,要么我选择了一个范围并为某些客户获得了多个观察结果。(在这种情况下 - 我不介意得到最早的观察)

一个重要说明:我知道如何创建一个 for 循环来解决这个问题,但是由于数据集有超过 400 万个观察值,所以它不实用,因为它需要很长时间才能运行。

数据集的基本示例:

   ID Date Sum
1   1    1 234
2   1    2  45
3   1    3   1
4   2    4 223
5   3    5 546
6   4    6  12
7   2    1  20
8   4    3  30
9   6    2   3
10  3    5  45
11  7    6 456
12  3    7  65
13  8    8 234
14  1    9  45
15  3    2   1
16  4    3 223
17  6    6 546
18  3    4  12
19  8    7  20
20  9    5  30
21 11    6   3
22 12    6  45
23 14    9 456
24 15   10  65
....

新的数据集看起来像这样:

ID 1Date 1Sum 2Date 2Sum 3Date 3Sum
1  1     234  2     45   3     1
2  1     20   4     223  NA    NA
3  2     1    5     546  5     45

...

谢谢你的帮助!

标签: r

解决方案


dplyr我认为如果得到帮助,你可以做到这一点tidyr

library(dplyr)
library(tidyr)
dd %>% group_by(ID) %>% mutate(seq=1:n()) %>% 
  pivot_wider("ID", names_from="seq", values_from = c("Date","Sum"))

dd上面的示例数据框在哪里。


推荐阅读