我有按日期排序的股票数据数据集,然后按该日期从最大到最小的回报幅度排序。每天有大约800种股票。
如何创建一个新数据框,其中只有每天前10名股票的回报率最高?
所以我需要每个日期前十名,其他我不在乎。
答案 0 :(得分:2)
dplyr是你的朋友。类似的东西:
new_df <- df %>% group_by(date) %>% top_n(10, stock)
答案 1 :(得分:2)
data.table
也可以快速完成此操作。
library(data.table)
# here are 20 random values on each of two dates
fake_data <-
data.table(date=rep(Sys.Date()-1:2, each=20),
stock=rnorm(20*2))
# subset data by date, then order the SD by stock
# return (descending) and take first 10 rows
fake_data[, .SD[order(-stock)][1:10,], by=date]