首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将由股票期权数据组成的数据框架分割为与单个期权契约相对应的单个数据框架

如何将由股票期权数据组成的数据框架分割为与单个期权契约相对应的单个数据框架
EN

Stack Overflow用户
提问于 2012-03-14 00:56:18
回答 2查看 358关注 0票数 0

我是新的R,但不是编程在一般情况下,但我被困在上述问题。我有一个大型.csv文件,其中包含2006-2011年的所有选项数据。我已经成功地将那个大文件加载到一个数据框架中。然而,这是我正在为之奋斗的下一步。我需要将这个数据帧拆分为'n‘个数据帧,其中'n’对应于较大数据帧中包含的单个选项契约的数量。因此,例如,如果我的原始数据框架包含1280看涨期权的日价格,该期权将在一个月内到期,而1290看涨期权的日价格将在一个月内到期,那么我想得到两个不同的数据框架。下面是我的大数据帧的str()的结果

代码语言:javascript
复制
 '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和过期的独特组合来拆分数据框架。似乎我可以使用a for每一个循环,但我已经被告知,循环应该避免在R,并已指向lapply方向。

从伪代码的角度来看,我是如何试图解决这个问题的:

加载大型data-set

  • Create --一个矩阵/向量/列表/数据框架(不确定使用哪一个),它保存了上述对象中的option.symbol、strike、call.put和expiration's

  • For的不同唯一组合,查询匹配的大型数据框架将结果存储为列表

  • 中包含的数据帧,最终结果是通过saveRDS函数包含一组data.frames

  • serialize列表的列表,因此我不必再次这样做。

我熟悉细分功能,例如

代码语言:javascript
复制
X<- Options.DF.List[[1]][  which(Options.DF.List[[1]]$date %in% SPX.Put.Purchase.Dates), ]

但我不知道如何扩展这种语法来实现我的目标。提前谢谢。

EN

Stack Overflow用户

发布于 2012-03-14 01:11:00

似乎您应该能够使用split

代码语言:javascript
复制
Splits <- c("option.symbol", "strike", "call.put", "expiration")
Options.DF.List <- split(Sample.DS, Sample.DS[,Splits])
票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9694500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档