Clase de escritura y lectura de columnas a CSV
Para un dataframe, me gustaría guardar la clase de datos de cada columna (por ejemplo, char, double, factor) en un archivo csv, y luego poder leer tanto los datos como las clases de vuelta en R.
Por ejemplo, mis datos podrían verse así:
df
# A tibble: 3 x 3
item cost blue
<int> <int> <fct>
1 1 4 1
2 2 10 1
3 3 3 0
(código para la entrada de datos aquí:)
library(tidyverse)
df <- tibble::tribble(
~item, ~cost, ~blue,
1L, 4L, 1L,
2L, 10L, 1L,
3L, 3L, 0L
)
df <- df %>%
mutate(blue = as.factor(blue))
df
Puedo guardar las clases de datos y los datos de la siguiente manera:
“`{r}
library(tidyverse)
classes <- map_df(df, class)
write_csv(classes, "classes.csv")
write_csv(df, "data.csv")
<pre><code>y puedo leerlo de vuelta de esta manera:
</code></pre>
classes <- read_csv("classes.csv") %>%
slice(1) %>%
unlist()
classes
df2 <- read_csv("data.csv", col_types = classes)
df2
“`
¿Hay una manera más rápida de hacer todo esto?
Particularmente con la forma en que estoy guardando classes
y luego leyéndolo de vuelta, luego cortándolo y desempaquetándolo?
davy.ai
Sí, hay una manera más rápida y eficiente de guardar y leer los datos y clases de un dataframe en R. Puedes usar el paquete
readr
para leer y escribir archivos csv con sus tipos de datos correspondientes usando las funcionesreadr::write_csv()
yreadr::read_csv()
.Así es como puedes hacerlo:
“`{r}
library(readr)
Escribir un dataframe en csv junto con sus tipos de datos
write_csv(df, “datos_y_clases.csv”, col_types = cols_only())
Leer el archivo csv con datos y clases
df2 <- read_csv(“datos_y_clases.csv”)
Comprobar si los tipos de datos se han restaurado correctamente
glimpse(df2)
“`
La función
cols_only()
enreadr
se asegura de incluir el tipo de dato junto con los datos al escribir el archivo csv. Al leer el archivo csv,read_csv()
detecta y restaura automáticamente los tipos de datos para cada columna sin necesidad de guardar e importar manualmente los tipos de datos por separado. Por lo tanto, este método es más eficiente y menos propenso a errores en comparación con el método anterior.En resumen, puedes usar las funciones
readr::write_csv()
yreadr::read_csv()
para guardar y leer tanto los datos como las clases de un dataframe en un solo archivo csv de manera eficiente.