write from data csv2 r save dataframe

from - write cvs r



Guardar y cargar data.frames (3)

Como señala @mrdwab, save guarda tanto los nombres como la estructura / datos (y de hecho puede guardar una cantidad de diferentes objetos R en un solo archivo). Hay otro par de funciones de almacenamiento que se comportan más de lo esperado. Prueba esto:

saveRDS(df, file="mytweets.rds") df2 <- readRDS("mytweets.rds")

Estas funciones solo pueden manejar un solo objeto a la vez.

He creado un marco de datos basado en un conjunto de twitters de la siguiente forma:

rdmTweets <- userTimeline("rdatamining", n=200) df <- do.call("rbind", lapply(rdmTweets, as.data.frame))

Ahora estoy guardando el marco de datos con guardar de esta manera:

save(df, file="data")

¿Cómo puedo cargar ese marco de datos guardado para uso futuro? Cuando uso:

df2 <- load("data")

y aplico dim(df2) debería devolver la cantidad de tweets que tiene el marco de datos, pero solo muestra 1.


Otra opción es guardar su marco de datos como un archivo csv. El beneficio de esta opción es que proporciona almacenamiento a largo plazo , es decir, es probable que pueda abrir su archivo csv en cualquier plataforma dentro de diez años. Con un archivo RData , solo puede abrirlo con R y no me gustaría apostar dinero para abrirlo entre versiones.

Para guardar el archivo como un csv, simplemente use: read.csv y write.csv , entonces:

write.csv(df, file="out.csv", row.name=FALSE) df = read.csv("out.csv", header=TRUE)

El comentario de Gavin a continuación planteó un par de puntos:

La ruta CSV solo funciona para datos de estilo tabular.

Completamente correcto. Pero si está guardando un marco de datos (como el OP), entonces sus datos están en forma de tabla.

Con R siempre tendrá la posibilidad de iniciar una versión anterior para leer los datos y exportarlos si por algún motivo cambian el formato de guardado y no permiten que otra función cargue el formato anterior.

Para jugar a adovacate del diablo, puedes usar este argumento con Excel y guardar tus datos como xls . Sin embargo, guardar sus datos en formato csv significa que nunca debemos preocuparnos por esto.

El formato de archivo de R está documentado, por lo que uno podría leer razonablemente los datos binarios en otro sistema usando esa información abierta.

Estoy totalmente de acuerdo, aunque "fácilmente" es un poco fuerte. Esta es la razón por la que guardar como un archivo RData no es tan importante. Pero si está guardando datos tabulares, ¿por qué no usar un archivo csv?

Para el registro, hay algunas razones para guardar datos tabulares como un archivo RData. Por ejemplo, la velocidad en leer / escribir el archivo o el tamaño del archivo.


save guarda el nombre del conjunto de datos y los datos. Por lo tanto, no debe asignar un nombre para load("data") y debería estar bien. En otras palabras, simplemente use:

load("data")

y cargará un objeto llamado df (o lo que sea que esté contenido en el archivo "data") en su espacio de trabajo actual.

Sin embargo, sugeriría un nombre más original para su archivo, y considere agregar una extensión para ayudarlo a recordar cuáles son sus archivos de comandos, sus archivos de datos, etc.

Trabaja tu camino a través de este simple ejemplo:

rm(list = ls()) # Remove everything from your current workspace ls() # Anything there? Nope. # character(0) a <- 1:10 # Create an object "a" save(a, file="myData.Rdata") # Save object "a" ls() # Anything there? Yep. # [1] "a" rm(a) # Remove "a" from your workspace ls() # Anything there? Nope. # character(0) load("myData.Rdata") # Load your "myData.Rdata" file ls() # Anything there? Yep. Object "a". # [1] "a" str(a) # Is "a" what we expect it to be? Yep. # int [1:10] 1 2 3 4 5 6 7 8 9 10 a2 <- load("myData.Rdata") # What about your approach? ls() # Now we have 2 objects # [1] "a" "a2" str(a2) # "a2" stores the object names from your data file. # chr "a"

Como puede ver, save permite guardar y cargar varios objetos a la vez, lo que puede ser conveniente cuando trabaja en proyectos con múltiples conjuntos de datos que desea mantener juntos.

Por otro lado, saveRDS (de la respuesta aceptada ) solo le permite guardar objetos individuales. De alguna manera, esto es más "transparente" ya que load() no le permite previsualizar el contenido del archivo sin antes cargarlo.