Я новичок в R, но не в программировании в целом, но я застрял в вышеуказанном вопросе. У меня есть большой файл .csv, который содержит все данные опций за 2006-2011 годы. Я успешно загрузил этот большой файл в фрейм данных. Тем не менее, это следующий шаг, за который я борюсь. Мне нужно разделить этот фрейм данных на число n фреймов, где n соответствует количеству отдельных опционных контрактов, содержащихся в большем фрейме данных. Например, если в моем исходном фрейме данных содержалась дневная цена опциона 1280, срок действия которого истекает через месяц, и дневная цена опциона 1290, срок действия которого истекает через месяц, я хотел бы получить два отдельных фрейма данных. Ниже приведен результат str()
моего большого фрейма данных
'data.frame': 2215636 obs. of 21 variables:
$ symbol : chr "SPX" "SPX" "SPX" "SPX" ...
$ exchange : chr "CBOE" "CBOE" "CBOE" "CBOE" ...
$ date : Date, format: "2006-01-03" "2006-01-03" "2006-01-03" "2006-01-03" ...
$ adjusted.stock.close.price: num 1269 1269 1269 1269 1269 ...
$ option.symbol : chr "JXAAF" "JXAMF" "JXAAI" "JXAMI" ...
$ expiration : Date, format: "2006-01-06" "2006-01-06" "2006-01-06" "2006-01-06" ...
$ strike : int 1230 1230 1245 1245 1260 1260 1275 1275 1290 1290 ...
$ call.put : chr "C" "P" "C" "P" ...
$ ask : num 40.1 0.25 25.4 0.7 12 2.45 3.1 9.3 0.55 22.2 ...
$ bid : num 38.1 0.05 23.4 0.2 10.5 1.95 2.45 8.3 0.05 20.2 ...
$ mean.price : num 39.1 0.15 24.4 0.45 11.25 ...
$ iv : num 0.13 0.128 0.13 0.128 0.13 ...
$ volume : int 10 76 37 145 292 62 113 55 0 5 ...
$ open.interest : int 226 762 39 125 482 404 72 1 203 200 ...
$ stock.price.for.iv : num 1269 1269 1269 1269 1269 ...
$ X. : chr "*" "*" "*" "*" ...
$ delta : num 0.99725 -0.00236 0.95624 -0.04179 0.73911 ...
$ vega : num 0.00886 0.00807 0.10122 0.09776 0.35569 ...
$ gamma : num 0.00057 0.00052 0.0065 0.00636 0.02286 ...
$ theta : num -0.1076 -0.0188 -0.3262 -0.2268 -0.9153 ...
$ rho : num 0.09134 -0.00022 0.08856 -0.00397 0.06901 ...
head(Sample.DS)
symbol exchange date adjusted.stock.close.price option.symbol expiration strike call.put ask bid
1 SPX CBOE 2006-01-03 1268.8 JXAAF 2006-01-06 1230 C 40.10 38.10
2 SPX CBOE 2006-01-03 1268.8 JXAMF 2006-01-06 1230 P 0.25 0.05
3 SPX CBOE 2006-01-03 1268.8 JXAAI 2006-01-06 1245 C 25.40 23.40
4 SPX CBOE 2006-01-03 1268.8 JXAMI 2006-01-06 1245 P 0.70 0.20
5 SPX CBOE 2006-01-03 1268.8 JXAAL 2006-01-06 1260 C 12.00 10.50
6 SPX CBOE 2006-01-03 1268.8 JXAML 2006-01-06 1260 P 2.45 1.95
mean.price iv volume open.interest stock.price.for.iv X. delta vega gamma theta rho
1 39.10 0.1298 10 226 1268.75 * 0.99725 0.00886 0.00057 -0.10765 0.09134
2 0.15 0.1283 76 762 1268.75 * -0.00236 0.00807 0.00052 -0.01883 -0.00022
3 24.40 0.1298 37 39 1268.75 * 0.95624 0.10122 0.00650 -0.32616 0.08856
4 0.45 0.1283 145 125 1268.75 * -0.04179 0.09776 0.00636 -0.22676 -0.00397
5 11.25 0.1298 292 482 1268.75 0.73911 0.35569 0.02286 -0.91528 0.06901
6 2.20 0.1283 62 404 1268.75 -0.25833 0.35397 0.02302 -0.81108 -0.02458
так что, возможно, лучший способ выразить это - мне нужно разделить фрейм данных по уникальной комбинации option.symbol, strike, call.put и expiration. Казалось бы, я мог бы использовать a для каждого цикла, но мне сказали, что в R следует избегать циклов и указывать в направлении lapply
.
С точки зрения псевдокода, вот как я пытался решить эту проблему:
- Загрузить большой набор данных
- Создать матрицу / вектор / список / фрейм данных (не уверен, какой использовать), который содержит различные уникальные комбинации option.symbol, strike, call.put и expiration's
- Для каждого элемента в вышеприведенном объекте запрашивается большой кадр данных для совпадений
сохранить результат как фрейм данных, содержащийся в списке
- Конечным результатом является список, содержащий набор данных. Рамки
- сериализует список с помощью функции saveRDS, поэтому мне больше не придется делать это снова.
Я знаком с функциями поднабора, такими как
X<- Options.DF.List[[1]][ which(Options.DF.List[[1]]$date %in% SPX.Put.Purchase.Dates), ]
но я не уверен, как расширить этот тип синтаксиса для достижения моих целей. Заранее спасибо.