我是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
方向。
从伪代码的角度来看,我是如何尝试解决这个问题的:
我熟悉子集化功能,例如
X<- Options.DF.List[[1]][ which(Options.DF.List[[1]]$date %in% SPX.Put.Purchase.Dates), ]
但我不确定如何扩展这种类型的语法来实现我的目标。提前谢谢。
答案 0 :(得分:1)
好像你应该能够使用split
。
Splits <- c("option.symbol", "strike", "call.put", "expiration")
Options.DF.List <- split(Sample.DS, Sample.DS[,Splits])
答案 1 :(得分:0)
您可以使用dlply
包中的plyr
,它会返回data.frames列表:
library("plyr")
dlply(Sample.DS, c("option.symbol", "strike", "call.put", "expiration"))