2012-07-03 16 views
6

que tienen esta cadena en R:espacio de lectura números separados en I

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

y yo debería leer los números en un vector. Ahora podría encontrar los mismos hilos para otros idiomas pero no para R aquí. Intenté:

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" 

pero estropea los números como se puede ver arriba. Creo que el problema está en la expresión de expresiones regulares, pero parece que no puedo hacerlo bien y realmente no tengo ni idea de eso.

Agradezco cualquier comentario.

Respuesta

4

En caso de que todavía desea utilizar su manera:

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

y para obtener los números:

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

sí, esto es exactamente la respuesta! la salida es muy limpia en comparación con la opción 'escanear' y 'rajar' –

+2

@ user1498689 - la "salida" es idéntica para las cuatro respuestas, así que no estoy seguro de a qué se refiere ... intente ejecutar 'todo .equal() 'o' idéntico() 'para confirmar. – Chase

7

Usted podría utilizar 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 

(" +" significa uno o más de espacio.)

2

un poco desordenado, pero esto debe hacer el truco: as.numeric(unlist(strsplit(numbers, "\\s+")))

Ejecutar el línea al revés para ver qué está pasando, strsplit se divide en espacios y devuelve una lista, unlist lo convierte en un cha vector de racter, y as.numeric se convierte en numérico, dejándolo con un vector numérico.

Cuestiones relacionadas