2010-07-16 10 views
16

Las funciones read.table y read.csv en R se utilizan para analizar un archivo o una URL que contiene datos delimitados y producir un marco de datos R. Sin embargo, ya tengo un vector de caracteres que contiene los datos delimitados por CSV (usando coma y \ n como delimitadores de columna y registro), por lo que no necesito leerlo desde un archivo o URL. ¿Cómo puedo pasar este vector de caracteres a read.table, read.csv o scan() sin escribir primero en un archivo en el disco y leerlo nuevamente? Me doy cuenta de que escribirlo en un disco es posible, pero estoy buscando una solución que no requiera este innecesario viaje de ida y vuelta y pueda leer datos del vector de caracteres directamente.¿Cómo puedo analizar datos CSV de un vector de caracteres para extraer un marco de datos?

Respuesta

24

Puede usar textConnection() para pasar el vector de caracteres a read.table(). Un ejemplo:

x <- "first,second\nthird,fourth\n" 
x1 <- read.table(textConnection(x), sep = ",") 
# x1 
    V1  V2 
1 first second 
2 third fourth 

La respuesta se encontró en R mailing list.

2017 EDITAR

Siete años más tarde, probablemente lo haría así:

read.table(text = x, sep = ",") 
+0

Una advertencia acerca de este enfoque: 'textConnection()' puede ser muy lento a medida que aumenta el número de filas. En 223k filas, me resulta más rápido escribir en un archivo CSV temporal, y leer eso en :( –

3

Una adición de menor importancia a la respuesta de neilfws. Esta función de contenedor es ideal para ayudar a responder preguntas en stackoverflow cuando el interrogador ha colocado datos brutos en su pregunta en lugar de proporcionar un marco de datos.

textToTable <- function(text, ...) 
{ 
    dfr <- read.table(tc <- textConnection(text), ...) 
    close(tc) 
    dfr 
} 

Con el uso, p.

textToTable("first,second\nthird,fourth\n", sep = ",") 
Cuestiones relacionadas