У меня есть функция, которая суммирует первые лучшие значения для столбца abs
.
abs5_fun <- function(x) {
...
buysell <- group_by_at(buysell, vars(TIME,SECCODE, DAY))
buysell$abs <- (buysell$PRICE.y - buysell$PRICE.x)/(buysell$PRICE.y + buysell$PRICE.x)/2
abs1 <- as.data.frame(summarise(buysell, abs = (head(sort(abs),5)[1])))
abs2 <- as.data.frame(summarise(buysell, abs = (head(sort(abs),5)[2])))
abs3 <- as.data.frame(summarise(buysell, abs = (head(sort(abs),5)[3])))
abs4 <- as.data.frame(summarise(buysell, abs = (head(sort(abs),5)[4])))
abs5 <- as.data.frame(summarise(buysell, abs = (head(sort(abs),5)[5])))
return(as.data.frame(list(abs1 = abs1, abs2 = abs2, abs3 = abs3, abs4 = abs4, abs5 = abs5)))
}
Вход выглядит так:
head(dataframe)
DAY NO SECCODE BUYSELL TIME ORDERNO ACTION PRICE VOLUME TRADENO TRADEPRICE
1 1 265281 SU46020RMFS2 S 100142905 136109 1 67.0000 500 NA NA
2 1 1973817 SU26212RMFS9 B 101622474 983190 1 64.0000 4 NA NA
3 1 1988822 SU26212RMFS9 S 101635958 990616 1 70.0000 4 NA NA
4 1 2120163 SU25077RMFS7 S 101857791 1055751 1 96.0000 50 NA NA
5 1 2344802 SU26212RMFS9 S 102829364 1165773 1 69.9999 4 NA NA
6 1 2358352 SU26212RMFS9 S 102905724 1165773 0 69.9999 4 NA NA
Выход:
abs5 <- abs5_fun(dataframe)
abs1.TIME abs1.SECCODE abs1.DAY abs1.abs abs2.TIME abs2.SECCODE abs2.DAY abs2.abs abs3.TIME abs3.SECCODE
1 1e+08 SU24018RMFS2 100 0.0014609644 1e+08 SU24018RMFS2 100 0.0014609644 1e+08 SU24018RMFS2
2 1e+08 SU24018RMFS2 101 0.0024485414 1e+08 SU24018RMFS2 101 0.0024497609 1e+08 SU24018RMFS2
3 1e+08 SU24018RMFS2 102 0.0019588639 1e+08 SU24018RMFS2 102 0.0024509804 1e+08 SU24018RMFS2
4 1e+08 SU24018RMFS2 103 0.0022021537 1e+08 SU24018RMFS2 103 0.0022021537 1e+08 SU24018RMFS2
5 1e+08 SU24018RMFS2 104 0.0009779834 1e+08 SU24018RMFS2 104 0.0009779834 1e+08 SU24018RMFS2
6 1e+08 SU24018RMFS2 105 0.0016360580 1e+08 SU24018RMFS2 105 0.0018791211 1e+08 SU24018RMFS2
abs3.DAY abs3.abs abs4.TIME abs4.SECCODE abs4.DAY abs4.abs abs5.TIME abs5.SECCODE abs5.DAY abs5.abs
1 100 0.001461209 1e+08 SU24018RMFS2 100 0.001461209 1e+08 SU24018RMFS2 100 0.001485684
2 101 0.002450736 1e+08 SU24018RMFS2 101 0.003181596 1e+08 SU24018RMFS2 101 0.003188528
3 102 0.003660322 1e+08 SU24018RMFS2 102 0.004152418 1e+08 SU24018RMFS2 102 0.005174714
4 103 0.002688998 1e+08 SU24018RMFS2 103 0.003926307 1e+08 SU24018RMFS2 103 0.003926307
5 104 0.001100023 1e+08 SU24018RMFS2 104 0.001100023 1e+08 SU24018RMFS2 104 0.003165124
6 105 0.002445941 1e+08 SU24018RMFS2 105 0.002689000 1e+08 SU24018RMFS2 105 0.005413142
Мне нужно вернуть значения VOLUME
, связанные с abs1.abs
, abs2.abs
и т. Д.
Я попытался получить все возможные комбинации abs
и VOLUME
для каждого TIME
и DAY
, а затем с помощью inner_join
и сопоставить по abs
, VOLUME
и всем другим столбцам, но результаты всегда смещены в моем большом наборе данных.
Мне бы хотелось иметь сгруппированный тиббл с первыми 5 лучшими abs
и ассоциированным VOLUME
в результате, но я не уверен, как использовать summarise
в этом случае. Вопрос в том, что я должен добавить к этой части функции:
abs1 <- as.data.frame(summarise(buysell, abs = (head(sort(abs),5)[1])))
abs2 <- as.data.frame(summarise(buysell, abs = (head(sort(abs),5)[2])))
abs3 <- as.data.frame(summarise(buysell, abs = (head(sort(abs),5)[3])))
abs4 <- as.data.frame(summarise(buysell, abs = (head(sort(abs),5)[4])))
abs5 <- as.data.frame(summarise(buysell, abs = (head(sort(abs),5)[5])))