如何抓取"-"后面的一些字符?

问题描述 投票:0回答:3

假设我的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]"))

但是我无法解决我的第二个问题,或者你们可能有一个优雅的方法来解决我的第一个问题。

r regex tidyverse stringr
3个回答
1
投票

试试这个。

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)


2
投票

您可以使用 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"))

2
投票

您可以使用 str_extractstringr:

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"))

0
投票

基础R解决方案。

setNames(data.frame(lapply(strsplit(tmp, "-"),"[", -1)), c("option_type", "strike_price"))

数据:

tmp <- c("m1803-C-2550",
         "m1807-P-3050")
© www.soinside.com 2019 - 2024. All rights reserved.