Предположим, у меня есть большой фрейм данных, который состоит из даты заказа, идентификатора пользователя и идентификатора товара.
order_id order_date user_id item_id
1 1 2016-06-22 30822 643
2 2 2016-06-22 30822 337
3 3 2016-06-22 30823 270
4 4 2016-06-22 30823 142
5 5 2016-06-22 30823 561
6 6 2016-06-22 30823 561
7 7 2016-06-22 30823 72
8 8 2016-06-22 30823 106
9 9 2016-06-22 30823 195
10 10 2016-06-22 30823 195
То, что я хочу сделать, это подсчитать, сколько заказов было сделано в один и тот же день одним и тем же пользователем и сколько заказов одного и того же товара было размещено одним и тем же пользователем, и отобразить оба значения в четвертый и пятый столбец. Таким образом, результат должен выглядеть примерно так:
order_id order_date user_id item_id same_day same_item
1 1 2016-06-22 30822 643 2 1
2 2 2016-06-22 30822 337 2 1
3 3 2016-06-22 30823 270 8 1
4 4 2016-06-22 30823 142 8 1
5 5 2016-06-22 30823 561 8 2
6 6 2016-06-22 30823 561 8 2
7 7 2016-06-22 30823 72 8 1
8 8 2016-06-22 30823 106 8 1
9 9 2016-06-22 30823 195 8 2
10 10 2016-06-22 30823 195 8 2
В качестве альтернативы двоичная переменная, отображающая, был ли заказан предмет более одного раза, также выполнит эту работу. Я знаю, что это можно легко рассчитать для каждой строки, используя sum()
:
> sum(df$order_date=="2016-06-22" & df$user_id==30823)
[1] 8
> sum(df$item_id==561 & df$user_id==30823)
[1] 2
Но я бы предпочел, чтобы он выполнялся автоматически, а не вручную для тысяч записей. У меня серьезно заканчиваются идеи, и я был бы очень благодарен за вашу помощь!