2012-07-03 12 views
6

Mam ten ciąg w R:kosmiczne Reading w R

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

i muszę czytać numery do wektora. Teraz mogłem znaleźć te same wątki dla innych języków, ale nie dla R tutaj. Próbowałem:

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" 

, ale powoduje to zanikanie liczb, jak widać powyżej. Myślę, że problem jest w wyrażeniu regex, ale wydaje się, że nie mogę tego naprawić i naprawdę nie mam pojęcia o tym.

Doceniam każdy komentarz.

Odpowiedz

4

W przypadku nadal chcesz używać swój sposób:

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

i uzyskać numery:

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

tak to jest właśnie odpowiedź! wynik jest bardzo czysty w porównaniu do opcji "skanowanie" i "strplit" –

+2

@ user1498689 - "wynik" jest identyczny dla wszystkich czterech odpowiedzi, więc nie jestem pewien, co masz na myśli ... spróbuj uruchomić 'wszystko .equal() 'lub' identyczny() ', aby potwierdzić. – Chase

7

Można użyć 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 

(" +" oznacza jedną lub więcej miejsca).

2

Trochę bałagan, ale to powinno wystarczyć: as.numeric(unlist(strsplit(numbers, "\\s+")))

Uruchom linia na zewnątrz, aby zobaczyć, co się dzieje, strsplit dzieli się na spacje i zwraca listę, unlist sprawia, że ​​jest cha racter vector i as.numeric konwertuje na wartość numeryczną pozostawiając wektor liczbowy.