procedimiento - ¿Hay alguna manera de usar read.csv para leer desde un valor de cadena en lugar de un archivo en R?
libreria para leer csv en r (5)
Estoy escribiendo un paquete R donde el código R habla con una aplicación Java. La aplicación Java genera una cadena con formato CSV y quiero que el código R pueda leer directamente la cadena y convertirla en un data.frame.
Esta función envuelve la respuesta de Dirk en una forma conveniente. Es brillante para responder preguntas en SO, donde el asker acaba de arrojar 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 pegue en su editor de texto.
foo bar baz
1 2 a
3 4 b
Ahora envuélvalo con text_to_table
, comillas y cualquier otro argumento para read.table
.
text_to_table("foo bar baz
1 2 a
3 4 b", header = TRUE)
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
Supongamos que tiene un archivo llamado tommy.csv (sí, imaginativo, 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 del argumento read.table
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 (modifique los nombres de las columnas ...), pero es un comienzo.
Tenga en cuenta que en las versiones actuales de R, ya no necesita el texto textConnection()
, simplemente puede 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
Edición de una respuesta de 7 años: ahora, esto es mucho más simple gracias al text=
argumento que se ha agregado 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í, mira la ayuda para textConnection()
- la noción muy poderosa en R es que, esencialmente, todos los lectores (como, por ejemplo, read.table()
y sus variantes) acceden a este objeto de conexión que puede ser un archivo, o una URL remota, o una tubería que viene de otra aplicación, o ... algún texto como en su caso.
El mismo truco se utiliza para los llamados documentos aquí:
> 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 esta es una manera simple de construir algo, pero también es costoso debido al análisis repetido de todos los datos. Hay otras formas de pasar de Java a R, pero esto debería hacerlo funcionar rápidamente. La eficiencia viene después ...