"3.1 ml"
またはのような文字列があります"abc 3.1 xywazw"
この文字列から抽出したいと思い"3.1"
ます。文字列からの数値の抽出に関するスタックオーバーフローに関する多くの質問を見つけましたが、10 進数の場合には解決策がありません。
このアプローチにより、小数点と小数がオプションになり、複数の数値を抽出できるようになります。
str <- " test 3.1 test 5"
as.numeric(unlist(regmatches(str,
gregexpr("[[:digit:]]+\\.*[[:digit:]]*",str))
) )
#[1] 3.1 5.0
負の数に関する懸念は、オプションの perl スタイルの先読みで対処できます。
str <- " test -4.5 3.1 test 5"
as.numeric(unlist(regmatches(str,gregexpr("(?>-)*[[:digit:]]+\\.*[[:digit:]]*",str, perl=TRUE))))
#[1] -4.5 3.1 5.0
R で動作するように微調整したhttp://www.regular-expressions.info/floatingpoint.htmlの浮動小数点数の正規表現。
s <- "1e-6 dkel"
regmatches(s,gregexpr("[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?",s))
> [[1]]
> [1] "1e-6"
正規表現を使用できます:
> str <- " test 3.1 test"
> as.numeric(regmatches(str,regexpr("[[:digit:]]+\\.[[:digit:]]+",str)))
[1] 3.1
regexpr
一致した文字列の開始位置と長さを返します。regmatches
一致を返します。その後、数値に変換できます。