2011-09-08 16 views
8

Me gustaría extraer una lista de objetos data.frame() a un archivo csv para que pueda trabajar en él para la presentación. Estoy encontrando que está respondiendo con un error:write.csv() una lista de data.frames desigualmente

In write.csv(tmp[i], file = "Output.csv", append = T) : 
    attempt to set 'append' ignored 

He guardado las salidas a una lista (todos los cuales se puede forzar a un df), aquí está un ejemplo:

outputs <- list() 
outputs$fivenum <- fivenum(rnorm(100)) 
outputs$summary <- as.data.frame(as.vector(summary(rnorm(100)))) 

tmp <- lapply(outputs, as.data.frame) 

write.csv(tmp, file="Output.csv",append=T) 

¿Cada acción de adición debe tener el mismo número de columnas?

+0

Sí, si se utiliza 'write.csv'. Creo que puedes evitar esto usando 'write.table (..., sep =", ", append = TRUE') - pero no lo he probado recientemente. – Andrie

+1

@Andrie: no se puede agregar 'write.csv' nunca. Al igual que no puede cambiar 'col.names',' sep', 'dec', o' qmethod'. –

+0

@JoshuaUlrich Eso es lo que pensé que dije, pero claramente el significado se perdió en la traducción. – Andrie

Respuesta

13

Eso es una advertencia, no es un error. No puede cambiar append=FALSE con write.csv. ?write.csv dice:

Attempts to change ‘append’, ‘col.names’, ‘sep’, ‘dec’ or ‘qmethod’ are ignored, with a warning.

Uso write.table con sep="," lugar.

+0

Ah, gracias Josh, lo extrañé por completo. –

+0

+1 Sí, eso es lo que tenía en mente en mi comentario a la pregunta principal. – Andrie

+0

¿hay un problema? Tengo algunos clientes a los que les gusta obtener cosas en Excel. Así que tengo que extraer un archivo excel de salidas (con elementos en las celdas en lugar de en la primera celda y tener que convertir el texto en columnas) –

1

Ahora puede exportar varias tramas de datos en un único archivo CSV usando sheetr

install.packages("devtools") 
library(devtools) 

# Install package from github 
install_github('d-notebook/sheetr') 
library(sheetr) 

# Create a list of dataframes 
iris_dataframe = list() 
iris_dataframe[["Setosa subset"]] = head(iris[iris$Species == "setosa",]) 
iris_dataframe[["Versicolor subset"]] = head(iris[iris$Species == "versicolor",]) 

# Write the list of dataframes to CSV file 
write_dataframes_to_csv(iris_dataframe, "exmaple_csv.csv") 

Qué va a exportar:

screenshot

.
.

O, si lo prefiere hacerlo manualmente, puede utilizar sink archivos:

# Sample dataframes: 
df1 = iris[1:5, ] 
df2 = iris[20:30, ] 

# Start a sink file with a CSV extension 
sink('multiple_df_export.csv') 

# Write the first dataframe, with a title and final line separator 
cat('This is the first dataframe') 
write.csv(df1) 
cat('____________________________') 

cat('\n') 
cat('\n') 

# Write the 2nd dataframe to the same sink 
cat('This is the second dataframe') 
write.csv(df2) 
cat('____________________________') 

# Close the sink 
sink() 
Cuestiones relacionadas