У меня есть идентификатор клиента, product_id1 и product_id2. Данные содержат информацию о покупках клиентов и отсортированы по клиентам и времени, поэтому первая строка каждого клиента является самой старой записью.
product_id1 включает в себя приобретенные товары product_id2 включает элементы, которые я хочу знать, был ли каждый из них приобретен ранее (проверьте из product_id1).
Для каждого элемента в product_id2 для каждого покупателя я хочу создать фиктивную переменную, которая показывала, был ли каждый элемент в product_id2 приобретен в прошлом
Другими словами, значение в product_id2 в n-й строке было показано по крайней мере один раз в 1 ~ (n-1) -ые строки в product_id1, Purchase_before - 1, в противном случае - 0.
Итак, я хочу создать столбец «куплено_перед».
Я могу сделать это с помощью цикла for, но есть ли какой-нибудь эффективный способ?
Данные как ниже,
customer id product_id1 product_id2 purchased_before
1 112 113 0
1 115 114 0
1 113 113 0
1 114 113 1
1 115 114 1
....
2 112 115 0
2 115 112 1
2 113 113 0
setDT(DT)[, rn := .I][ , purchased_before := DT[DT, on = .(customer_id, product_id1 = product_id2, rn < rn), .N, by = .EACHI]$N > 0][product_id2 == 115]
14.12.2017on
описывает, какие столбцы должны использоваться в объединении и как. Так что фильтрация здесь не работает. Если честно, я не понимаю, что вам нужно. Возможно, станет яснее (по крайней мере, для меня), если вы разместите новый вопрос, показывающий ожидаемый результат? 14.12.2017