2010-12-17 8 views
6

Esto debería ser algo fácil de hacer. Los ejemplos similares que he leído aquí han sido un poco más complejos y las técnicas realmente no me funcionan.R strsplit problema (¿es fácil de arreglar?)

que tienen una variable llamada ID_STRING

> typeof(id_string) 
[1] "character" 

y

> id_string 
[1] "1,2,5,6,10" 

Lo que quiero hacer es dividir estos valores y almacenarlos en una nueva variable. De tal manera que, por ejemplo:

x[1] = 1 
x[4] = 6 
x[5] = 10 

he intentado hacer

x <- strsplit(id_string,",") 

para dividirlo por una coma, pero apenas consigo x = "1 2 5 6 10"

He leído a través this post aquí que es similar y pensé que algo así como

x <- read.csv(textConnection(id_string)) 

funcionaría pero fue en vano.

Tal vez estoy demasiado pensando en esto. Por favor, déjame saber si tienes algunas ideas. Gracias.

Respuesta

7

No estoy seguro de lo que está haciendo mal porque funciona como se anuncia.

> x <- unlist(strsplit("1,2,5,6,10", ",")) 
> x 
[1] "1" "2" "5" "6" "10" 
> x[1] 
[1] "1" 

Tenga en cuenta que strsplit devuelve un list.

+0

Wow sí, había olvidado la lista de elementos a su alrededor. ¡Gracias por responder rapido! – user546497

+0

@user: también podría envolver todo eso en 'as.numeric()' si va a tratar con números todo el tiempo. Si te encuentras haciendo esto con frecuencia, poner todo eso en una función personalizada te ahorrará tiempo y tipeo. – Chase

+1

El método x <- read.csv (textConnection (id_string)) supone que tiene un encabezado, pero que habría devuelto un dataframe con x <- read.table (textConnection (id_string), sep = ",") –

0

Seguir con strsplit como se describe anteriormente es probablemente el mejor.

Creo que read.csv no estaba haciendo lo que esperaba porque estaba buscando un encabezado. Puede intentar:

s <- "1,2,5,6,10" 
read.csv(textConnection(s), header=FALSE) 

explícitamente diciéndole que no busque un encabezado. Sin embargo, aún tendrá que extraer sus números del data.frame resultante. Puede que sea mejor ir con el escaneo de función de nivel inferior, que le dará el vector de números directamente:

scan(textConnection(s), sep=",", quiet=TRUE) 
Cuestiones relacionadas