2012-07-03 3 views
6

に私はRで、この文字列を持っている:読書スペース区切りの数字は、R

numbers <- "4 4956 1.00e-09   50.9  1.244 47.1 1.04 5.5  0.499 13.9  0" 

を、私はベクターに数字をお読みください。 他の言語でも同じスレッドが見つかりましたが、ここではRでは見つかりませんでした。私は試しました:

library(stringr) 
str_extract_all(numbers, "[0-9]+") 
[[1]] 
[1] "4" "4956" "1" "00" "09" "50" "9" "1" "244" "47" "1" 
[12] "1" "04" "5" "5" "0" "499" "13" "9" "0" 

しかし、上記のように数値が大きくなります。私は問題が正規表現であると思うが、私はそれを正しく得ることはできないと思われ、私は本当にそれについての手掛かりがありません。

コメントありがとうございます。

答えて

4

あなたはまだあなたの方法を使用したい場合:

str_extract_all(numbers, "[\\.0-9e-]+") 

と番号を取得する:

as.numeric(unlist(str_extract_all(numbers, "[\\.0-9e-]+"))) 
+0

をはい、これは正確に答えです!出力は 'scan'と 'strplit'オプションに比べて非常にきれいです –

+2

@ user1498689 - 「出力」は4つの答えすべてで同じですので、あなたが何を参照しているのか分かりません。 .equal() 'または' identical() 'を使って確認してください。 – Chase

7

あなたはscanを使用することができます。

> y <- scan(con <- textConnection(numbers)) 
Read 11 items 
> close(con) 
> y 
[1] 4.000e+00 4.956e+03 1.000e-09 5.090e+01 1.244e+00 4.710e+01 1.040e+00 
[8] 5.500e+00 4.990e-01 1.390e+01 0.000e+00 
1
as.numeric(strsplit(numbers,split=" +")[[1]])->numbers 

" +"が1つの以上のスペースを意味します。)

2

少し厄介が、これはトリックを行う必要があります:as.numeric(unlist(strsplit(numbers, "\\s+")))

ランインクルード何が起こっているのかを見るために内側に線を引いて、strsplitはスペースを分割してリストを返します。unlistはそれをチャにしますracterベクトル、as.numericは数値に変換して数値ベクトルを返します。

関連する問題