[英]How can I use regex to parse an OCC Option Symbol in R?
OCC 选项符号由 4 个部分组成:
AAPL220121C00145000
TSLA220121C01050000
HD220121C00400000
"%Y-%m-%d"
例如, AAPL220121C00145000
表示对AAPL
的call
,到期日为 2022 年 1 月01/21/2022
日,行使价$145.00
。
我想将这些 OCC 放入 data.table 如下
Symbol ExpDate Type Strike
AAPL 2022-01-21 call 145
TSLA 2022-01-21 call 1050
HD 2022-01-21 call 400
我尝试了以下但似乎有一些问题 -
library(data.table)
read.table(text=gsub("(?=[A-Za-z])((\\d{2})(\\d{2})(\\d{2}))([PC])(\\d{8})", "\\1,\\2,\\3,\\4", "AAPL220121C00145000"),
colClasses = c("character", "date", "character", "numeric"), sep=",", stringsAsFactors = FALSE)
有人可以仅使用正则表达式帮助创建上述格式的 data.table 吗?
library(dplyr)
df %>% mutate(stock = substring(option, 1, 4)) %>%
mutate(Strike = as.integer(substring(option, 12, 16))) %>%
mutate(Type = ifelse(substring(option, 11, 11) == 'C', 'CALL', 'PUT')) %>%
mutate(ExpDate = ymd(substring(option, 5, 10)))
option stock Strike Type ExpDate
1 AAPL220121C00145000 AAPL 145 CALL 2022-01-21
2 TSLA220121C01050000 TSLA 1050 CALL 2022-01-21
你的探索跨越了多个问题。 我专注于一种将字符串拆分为固定 widt 部分的简单方法。
从那里开始,您可能能够解决 rest。
library(iotools)
v <- c(4,6,1,8)
iotools::dstrfw(
mystrings,
col_types = c("character", "character", "character", "numeric"),
widths = v)
# V1 V2 V3 V4
# 1 AAPL 220121 C 145000
# 2 TSLA 220121 C 1050000
日期部分无法在 1 go 中处理,因为 iotools 仅支持 %Y-%m-%d 格式的日期(使用 fasttime 包)。 数字部分可以很容易地除以 1000,因为它已经作为数字读入(注意前导零被去除)。
我们可以使用来自base R
strcapture
strcapture
type.convert(strcapture("([A-Za-z]+)(\\d{2}\\d{2}\\d{2})([PC])(\\d{8})",
"AAPL220121C00145000", proto = list(Symbol = "character",
ExpDate = "date", Type = "character", Strike = "numeric")), as.is = TRUE)
Symbol ExpDate Type Strike
1 AAPL 220121 C 145000
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.