2012-07-03 13 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

是的,這是完全的答案!與'掃描'和'strplit'選項相比,輸出非常乾淨 –

+2

@ user1498689 - 所有四個答案的「輸出」都是相同的,所以我不確定你指的是什麼......嘗試運行all .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 

" +"是指一個或更多的空間。)

2

有些凌亂,但是這應該做的伎倆:as.numeric(unlist(strsplit(numbers, "\\s+")))

運行內線出去看看發生了什麼,strsplit拆分空格並返回一個列表,unlist使它成爲一個cha算法矢量,並且as.numeric轉換爲數字,給你一個數字矢量。