У меня есть данные со следующими столбцами:
Date CID FID rank
31/01/17 abc0001 rx180x01 0
31/01/17 abc0001 rx180x02 0
31/01/17 abc0001 rx180x03 2
28/02/17 abc0001 rx180x32 1
28/02/17 abc0001 rx180x31 0
Каждый CID имеет несколько уникальных FID, сопоставленных с ним, и имеет некоторый ранг для этих FID. Мне нужно создать 2 новых столбца finalrank и finalFID.
Финальный ранг - это максимальный ранг каждого CID для каждой даты. т. е. для CID abc0001, на дату 31.01.17, finalrank будет равен 2. Эта логика будет применяться ко всей уникальной комбинации CID-даты.
FinalFID - это тот FID, который имеет конкретное значение finalrank для CID в дате. Например, в дате 31.01.17 для CID abc0001 FID с максимальным рангом равен rx180x03
Так что мой результат должен выглядеть так:
Date CID FID rank finalrank finalFID
31/01/17 abc0001 rx180x01 0 2 rx180x03
31/01/17 abc0001 rx180x02 0 2 rx180x03
31/01/17 abc0001 rx180x03 2 2 rx180x03
28/02/17 abc0001 rx180x32 1 1 rx180x32
28/02/17 abc0001 rx180x31 0 1 rx180x32
Я написал код, который выглядит элегантно и хорошо, но он не работает для очень больших данных. У того, с кем я имею дело, около 5 000 000. Когда я запускаю его в R, он показывает, что больше ничего не работает для таких огромных кадров данных.
data = dplyr::group_by(data,CID,date)
data = arrange(data,CID,date)
data = dplyr::mutate(data, finalrank =max(rank))
# Id FID of maximum rank
data = dplyr::mutate(data, match = FID[match(finalrank ,rank)])