我有一个数据,包含以下列:
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,每个CID都有一些排名。我需要创建两个新列finalrank和finalFID。
finalrank是每个日期中每个CID的最大排名。例如,对于CID abc0001,在日期31/01/17中,finalrank将为2。这个逻辑将应用于所有唯一的CID-日期组合。
FinalFID是具有特定finalrank值的CID在日期中的FID。例如,在日期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
我写了一段代码,看起来很优雅,也很好,但是对于非常大的数据却无法运行。我正在处理的数据有500万条。当我在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)])
data.table
而不是tidyverse
。看起来你有一个大数据集。 - Onyambulibrary(data.table);setDT(dat)[,c("finalrank","finalFID"):=.(max(rank),FID[which.max(rank)]),by=.(Date,CID)];dat
- Onyambu?data.table
或者您可以点击这里,并且点击您想要了解的函数,包括:=
。 - Onyambu