Создание сводного набора данных с несколькими объектами и несколькими наблюдениями на объект - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть набор данных с отчетами из местного магазина, где каждая строка имеет идентификатор клиента, дату покупки и общую стоимость покупки. Я хочу создать новый график, в котором для каждого идентификатора клиента у меня есть все покупки за последний месяц или даже просто выборки покупок за выбранные даты. Основная проблема заключается в том, что некоторые клиенты могут покупать один раз в месяц, в то время как другие могут приходить ежедневно - поэтому количество наблюдений за период времени может варьироваться.

Я пытался установить подмножество своего набора данных в определенный интервал времени, но либо я выбираю конкретную дату - и тогда я получаю лишь небольшой процент от всех клиентов, либо я выбираю диапазон и получаю несколько наблюдений для определенныхклиентов. (В данном случае - я не возражаю против получения самого раннего наблюдения)

Важное примечание: я знаю, как создать цикл for для решения этой проблемы, но поскольку набор данных содержит более 4 миллионов наблюдений, это не так. Это практично, поскольку для запуска потребуется очень много времени.

Базовый пример того, как выглядит набор данных:

   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

...

Спасибо за помощь!

1 Ответ

0 голосов
/ 05 ноября 2019

Я думаю, что вы можете сделать это немного, если справка из 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 - это ваш примерный фрейм данных выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...