¿Hay una manera de utilizar read.csv para leer desde un valor de cadena en lugar de un archivo en R?

StackOverflow https://stackoverflow.com/questions/3936285

  •  30-09-2019
  •  | 
  •  

Pregunta

Estoy escribiendo un paquete de R, donde R El código habla con una aplicación Java. La aplicación Java da salida a una cadena con formato CSV y quiero el código R para poder leer directamente la cadena y convertirla en una hoja.de.datos.

¿Fue útil?

Solución

Edición de una respuesta de 7 años de edad: Por ahora, esto es más más sencillo gracias a la discusión text= que se ha añadido a read.csv() y por igual:

R> data <- read.csv(text="flim,flam
+ 1.2,2.2
+ 77.1,3.14")
R> data
  flim flam
1  1.2 2.20
2 77.1 3.14
R> 

Sí, vistazo a la ayuda para textConnection() - muy potente en I noción es que prácticamente todos los lectores (como por ejemplo read.table() y sus variantes) acceso a estos conexión objeto que puede ser un archivo o una URL remota, o un tubo que viene de otra aplicación, o ... texto como en su caso.

El mismo truco se utiliza para los llamados aquí documentos:

> lines <- "
+ flim,flam
+ 1.2,2.2
+ 77.1,3.14
+ "
> con <- textConnection(lines)
> data <- read.csv(con)
> close(con)
> data
  flim flam
1  1.2 2.20
2 77.1 3.14
> 

Tenga en cuenta que este es un sencilla camino para la construcción de algo, pero también es costosa debido a la repetida análisis de todos los datos. Hay otras maneras de obtener de Java a R, pero esto debe conseguir que ir rápidamente. La eficiencia viene a continuación ...

Otros consejos

Tenga en cuenta que en las versiones actuales de ahora-R, ya no es necesario el textConnection(), es posible simplemente hacer esto:

> states.str='"State","Abbreviation"
+ "Alabama","AL"
+ "Alaska","AK"
+ "Arizona","AZ"
+ "Arkansas","AR"
+ "California","CA"'
> read.csv(text=states.str)
       State Abbreviation
1    Alabama           AL
2     Alaska           AK
3    Arizona           AZ
4   Arkansas           AR
5 California           CA

Sí. Por ejemplo:

string <- "this,will,be\na,data,frame"
x <- read.csv(con <- textConnection(string), header=FALSE)
close(con)
#> x
#    V1   V2    V3
#1 this will    be
#2    a data frame

Suponga que tiene un archivo llamado tommy.csv (sí, imaginativa, lo sé ...) que tiene el contenido de

  

col1 col2 \ n 1 1 \ n 2 2 \ n 3 3

donde cada línea se separa con un carácter de escape "\ n".

Este archivo se puede leer con la ayuda de argumento allowEscapes en read.table.

> read.table("tommy.csv", header = TRUE, allowEscapes = TRUE)

  col1 col2
1 col1 col2
2    1    1
3    2    2
4    3    3

No es perfecto (modificar nombres de columna ...), pero es un comienzo.

Esta función ajusta la respuesta de Dirk en una forma conveniente. Es brillante para responder a las preguntas sobre SO, donde el autor de la pregunta solo se ha deshecho de los datos en pantalla.

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

Para usarlo, primero copie los datos en pantalla y pegarlo en su editor de texto.

  

foo bar baz
  1 2 a
  3 4 b

Ahora se envuelve con text_to_table, cotizaciones y otros argumentos para read.table.

text_to_table("foo bar baz
1 2 a
3 4 b", header = TRUE)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top