Сегодня мой первый день на R - ваши советы пройдут долгий путь.R - подмножество DF с использованием() и()
Я пытаюсь создать агрегированный вид пользователей на основе деятельности по бронированию.
Извлечь уникальный CustID в таблице заказов. Создайте новый DF для клиента.
customer <- with(BookingsDF,data.frame(CustID=sort(unique(CustID))))
Добавить в каждую таблицу CustID в таблице клиентов количество транзакций, которые они совершили.
customer <- cbind(customer, NumberOrders = with(BookingsDF,
as.numeric (by (id, CustID, function(x) length(unique(x))))))
Это генерирует сообщение об ошибке
Ошибка в data.frame (..., check.names = FALSE): аргументы подразумевают отличающуюся количество строк: 373545, 391910
Это не имеет смысла - как два запроса могут выдавать разные длины? Учитывая, что первый запрос извлекает уникальный CustID, а второй запрос извлекает количество раз, когда каждый уникальный CustID забронировал.
спасибо.
ОКОНЧАТЕЛЬНЫЙ: Спасибо за помощь. Я обновил код до:
customer <- booked.dt[,{
FirstPurchaseDate = .SD[which.min(CreatedDate)]
LastPurchaseDate = .SD[which.max(CreatedDate)]
NumberOrders = .N
TotalAmount = sum(Price)
} , by = CustID]
К сожалению, для этого потребовалось много времени. Поэтому мне пришлось выполнять манипуляции через SQL, а затем загружать агрегированные данные в R.
Выход из 'by' будет« списком » – akrun