【问题标题】:Creating an summary dataset with multiple objects and multiple observations per object创建具有多个对象和每个对象多个观察值的汇总数据集
【发布时间】:2020-03-01 00:05:38
【问题描述】:

我有一个包含本地商店报告的数据集,其中每一行都有客户的 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

...

感谢您的帮助!

【问题讨论】:

  • 那么这个样本输入的期望结果是什么?你到底在哪里卡住了?
  • 请将所需结果添加到问题本身,以便正确格式化而不是在 cmets 中。
  • @MrFlick 这更清楚了吗?非常感谢您的帮助

标签: r


【解决方案1】:

如果dplyrtidyr 提供帮助,我认为你可以做到这一点

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

dd 是您上面的示例数据框。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    相关资源
    最近更新 更多