假设我的tbl里有一列 "期权代码",数据是这样的,我想把"-"之间的CP作为我的新变量 "期权类型",把第二个"-"后面的25503050作为我的新变量 "行权价格"。
m1803-C-2550
m1807-P-3050
我想把"-"之间的CP作为新的变量 "期权类型", 把第二个"-"后面的25503050作为新的变量 "行权价格".
我如何使用以下代码 tidyverse
?
现在,我可以通过以下方式解决第一个问题
tbl %>% mutate(option_type = str_sub(option_code, str_locate(option_code, "[CP]"))
但是我无法解决我的第二个问题,或者你们可能有一个优雅的方法来解决我的第一个问题。
试试这个。
library(dplyr)
library(stringr)
df %>%
mutate(option_type = str_extract(option_code, "(?<=-)[CP]"),
strike_price = as.numeric(str_extract(option_code, "(?<=-)\\d+")))
#> option_code option_type strike_price
#> 1 m1803-C-2550 C 2550
#> 2 m1807-P-3050 P 3050
df <- data.frame(option_code = c("m1803-C-2550", "m1807-P-3050"))
创建于2020-05-23 重读包 (v0.3.0)
您可以使用 separate()
在 tidyr
用分隔符来分割字符串。
library(tidyr)
df %>%
separate(option_code, c(NA, "option_type", "strike_price"))
# option_type strike_price
# 1 C 2550
# 2 P 3050
NA
表示去掉第一部分,即。m1803
.option_code
那么只需添加参数 remove = F
.数据
df <- data.frame(option_code = c("m1803-C-2550", "m1807-P-3050"))
您可以使用 str_extract
从 stringr
:
df %>% mutate(option_type = str_extract(option_code, "[CP]"),
strike_price = str_extract(option_code, "(?<=[CP]-)\\d+"))
# A tibble: 2 x 3
option_code option_type strike_price
<chr> <chr> <chr>
1 m1803-C-2550 C 2550
2 m1807-P-3050 P 3050
数据。
df <- tibble(option_code = c("m1803-C-2550","m1807-P-3050"))
基础R解决方案。
setNames(data.frame(lapply(strsplit(tmp, "-"),"[", -1)), c("option_type", "strike_price"))
数据:
tmp <- c("m1803-C-2550",
"m1807-P-3050")