R:根据模式删除字符串的第一部分和最后一部分

CAPM

该字符串是债券的代号:OAT 3 25/32 7/17/17我想提取3 25/32的票息率,并读取为3 + 25/323.78125现在,我一直在试图删除的日期和姓名OATgsub,但我遇到了一些问题。

这是删除日期的代码:

tkr.bond <- 'OAT 3 25/32 7/17/17'
tkr.ptrn <- '[0-9][[:punct:]][0-9][[:punct:]][0-9]'
gsub(tkr.ptrn, "", tkr.bond)

但是,它得到了我相同的字符串。当我[0-9][[:punct:]][0-9]在模式中使用时,我设法删除了部分日期,但是它也删除了债券息票率的零头部分。

棘手的事情是找到一种不涉及优惠券模式的解决方案,因为股票代码具有以下形式:名称优惠券日期,因此,对优惠券使用特定模式可能会限制解决方案的范围。例如,如果代码是这种方式OAT 0 7/17/17,则优惠券为零。

阿克伦

尝试

eval(parse(text=sub('[A-Z]+ ([0-9]+ )([0-9/]+) .*', '\\1 + \\2', tkr.bond)))
#[1] 3.78125

否则您可能需要

sub('^[A-Z]+ ([^A-Z]+) [^ ]+$', '\\1', tkr.bond)
#[1] "3 25/32"

更新

tkr.bond1 <- c(tkr.bond, 'OAT 0 7/17/17')
v1 <- sub('^[A-Z]+ ([^A-Z]+) [^ ]+$', '\\1', tkr.bond1)
unname(sapply(sub(' ', '+', v1), function(x) eval(parse(text=x))))
#[1] 3.78125 0.00000

或者

vapply(strsplit(tkr.bond1, ' '), function(x)  
  eval(parse(text= paste(x[-c(1, length(x))], collapse="+"))), 0)
#[1] 3.78125 0.00000

还是没有 eval(parse

 vapply(strsplit(gsub('^[^ ]+ | [^ ]+$', '', tkr.bond1), '[ /]'), function(x) {
         x1 <- as.numeric(x)
         sum(x1[1], x1[2]/x1[3], na.rm=TRUE)}, 0)
#[1] 3.78125 0.00000

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章