R 从字符串中提取值
我有一个数据框,看起来像这样:R 从字符串中提取值,r,regex,R,Regex,我有一个数据框,看起来像这样: data.frame(puts = c("Put Daimler N JUN13 EUR 50 (24.06.2013)", "Put Daimler N SEP12 EUR 40.5 (24.09.2012)", "Put Wincor Nixdorf OCT14 CHF 43.80 (20.10.2")) data.frame(puts = c("Put Daimler N JUN13 EUR 50 (24.06.2013)", "Put Dai
data.frame(puts = c("Put Daimler N JUN13 EUR 50 (24.06.2013)",
"Put Daimler N SEP12 EUR 40.5 (24.09.2012)",
"Put Wincor Nixdorf OCT14 CHF 43.80 (20.10.2"))
data.frame(puts = c("Put Daimler N JUN13 EUR 50 (24.06.2013)",
"Put Daimler N SEP12 EUR 40.5 (24.09.2012)",
"Put Wincor Nixdorf OCT14 EUR 43.80 (20.10.2"),
strike = c(50, 40.5, 43.80))
我需要从每个字符串中提取所谓的执行价。
这意味着我需要将欧元和瑞士法郎货币描述后面的数字分开
不幸的是,每个字符串中唯一的常量是价格跟随欧元或瑞士法郎字符。所以我的想法是在“EUR”或“CHF”出现后提取第一个数值,但我完全无法产生任何令人满意的结果
生成的数据帧应如下所示:
data.frame(puts = c("Put Daimler N JUN13 EUR 50 (24.06.2013)",
"Put Daimler N SEP12 EUR 40.5 (24.09.2012)",
"Put Wincor Nixdorf OCT14 CHF 43.80 (20.10.2"))
data.frame(puts = c("Put Daimler N JUN13 EUR 50 (24.06.2013)",
"Put Daimler N SEP12 EUR 40.5 (24.09.2012)",
"Put Wincor Nixdorf OCT14 EUR 43.80 (20.10.2"),
strike = c(50, 40.5, 43.80))
谢谢你的帮助!Pat您可以使用
sub
功能
df <- data.frame(puts = c("Put Daimler N JUN13 EUR 50 (24.06.2013)",
"Put Daimler N SEP12 EUR 40.5 (24.09.2012)",
"Put Wincor Nixdorf OCT14 CHF 43.80 (20.10.2"))
df$strike <- as.numeric(sub(".* (?:CHF|EUR) (\\d+(?:\\.\\d+)?).*", "\\1",df$puts))
df
# puts strike
# 1 Put Daimler N JUN13 EUR 50 (24.06.2013) 50
# 2 Put Daimler N SEP12 EUR 40.5 (24.09.2012) 40.5
# 3 Put Wincor Nixdorf OCT14 CHF 43.80 (20.10.2 43.80
df您可以使用sub
功能
df <- data.frame(puts = c("Put Daimler N JUN13 EUR 50 (24.06.2013)",
"Put Daimler N SEP12 EUR 40.5 (24.09.2012)",
"Put Wincor Nixdorf OCT14 CHF 43.80 (20.10.2"))
df$strike <- as.numeric(sub(".* (?:CHF|EUR) (\\d+(?:\\.\\d+)?).*", "\\1",df$puts))
df
# puts strike
# 1 Put Daimler N JUN13 EUR 50 (24.06.2013) 50
# 2 Put Daimler N SEP12 EUR 40.5 (24.09.2012) 40.5
# 3 Put Wincor Nixdorf OCT14 CHF 43.80 (20.10.2 43.80
df这是另一种解决方案。虽然不如@Avinash干净,但它确实有效
df<- data.frame(puts = c("Put Daimler N JUN13 EUR 50 (24.06.2013)",
"Put Daimler N SEP12 EUR 40.5 (24.09.2012)",
"Put Wincor Nixdorf OCT14 CHF 43.80 (20.10.2"),stringsAsFactors=F)
这是另一个解决方案。虽然不如@Avinash干净,但它确实有效
df<- data.frame(puts = c("Put Daimler N JUN13 EUR 50 (24.06.2013)",
"Put Daimler N SEP12 EUR 40.5 (24.09.2012)",
"Put Wincor Nixdorf OCT14 CHF 43.80 (20.10.2"),stringsAsFactors=F)
如果公司名称为“21世纪”
或“54工作室”
,该怎么办?您希望字符串中不会出现其他数字。是的,它会失败。与存在多种货币(欧元;瑞士法郎)的情况相同,使用另一种解决方案时,用户明确说明了格式。另一种解决方案不必考虑数据中没有的案例。另一方面,你的解决方案忽略了匹配货币缩写后数字的具体要求。我同意皮埃尔的观点。但是谢谢你文森特的帮助!如果公司名称为“21世纪”
或“54工作室”
,该怎么办?您希望字符串中不会出现其他数字。是的,它会失败。与存在多种货币(欧元;瑞士法郎)的情况相同,使用另一种解决方案时,用户明确说明了格式。另一种解决方案不必考虑数据中没有的案例。另一方面,你的解决方案忽略了匹配货币缩写后数字的具体要求。我同意皮埃尔的观点。但是谢谢你文森特的帮助!非常好的阿维纳什!谢谢。我必须学习很多关于字符串操作的知识。你能推荐一个关于这类任务的教程吗?@Pat我从中学到了很多。但你可以考虑阅读这个非常好的阿维纳什!谢谢。我必须学习很多关于字符串操作的知识。你能推荐一个关于这类任务的教程吗?@Pat我从中学到了很多。但是你可以考虑阅读