【发布时间】:2018-12-13 06:51:27
【问题描述】:
我有一个包含以下列的数据:
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 是在日期中对 CID 具有特定 finalrank 值的 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
我编写了一个看起来很优雅的代码,但它不适用于非常大的数据。我正在处理的那个有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)])
【问题讨论】:
标签: r window-functions dplyr