Una rápida y más sucinta tidyverse
(aka: dplyr
/purrr
) solución:
tbl <-
list.files(pattern="*.csv") %>%
map_df(~read_csv(.))
Si el encasillado es descarado, puede forzar todas las columnas para que sean como caracteres con esto.
tbl <-
list.files(pattern="*.csv") %>%
map_df(~read_csv(., col_types = cols(.default = "c")))
Si usted está deseando que echar mano de subdirectorios para construir su lista de archivos para unirse con el tiempo, a continuación, asegúrese de incluir el nombre de la ruta, así como registrar los archivos con sus nombres completos en su lista. Esto permitirá que el trabajo de enlace continúe fuera del directorio actual. (Pensando en las rutas completas como operando como pasaportes para permitir el movimiento de regreso a través del directorio 'fronteras'.)
tbl <-
list.files(path = "./subdirectory/",
pattern="*.csv",
full.names = T) %>%
map_df(~read_csv(., col_types = cols(.default = "c")))
Como Hadley describe here (a mitad de camino hacia abajo):
map_df(x, f)
es efectivamente el mismo que do.call("rbind", lapply(x, f))
pero debajo del capó es mucho más eficiente.
y un agradecimiento a Jake Kaupp por presentarme a map_df()
here.
función de bonificación de-añadiendo nombres de archivo a los registros por Niks función de solicitud de comentarios a continuación:
* Añadir originales filename
a cada registro.
Código explicado: haga una función para agregar el nombre del archivo a cada registro durante la lectura inicial de las tablas. Luego use esa función en lugar de la función read_csv()
.
read_plus <- function(flnm) {
read_csv(flnm) %>%
mutate(filename = flnm)
}
tbl_with_sources <-
list.files(pattern="*.csv",
full.names = T) %>%
map_df(~read_plus(.))
(Los Encasillamiento y subdirectorio enfoques de manipulación también puede ser manejado dentro de la función read_plus()
de la misma manera como se ilustra en la segunda y tercera variantes sugeridas anteriormente.)
Gracias! esto funciona muy bien ... ¿cómo voy a nombrar cada archivo que acabo de importar para que pueda llamarlos fácilmente? –
si puede mostrarnos las primeras líneas de algunos de sus archivos, es posible que tengamos algunas sugerencias: edite su pregunta para eso. – Spacedman
El código anterior funciona perfectamente para importarlos como objetos únicos, pero cuando intento recuperar una columna del conjunto de datos, no la reconoce, ya que es solo un objeto, no un marco de datos , es decir, mi versión del código anterior es: setwd ('C:/Users/nueva/escritorio/inmersiones/0904_003') temp <-list.files (patrón = "* csv") ddives <- lapply (temperatura, read.csv) Así que ahora cada archivo se llama ddives [n], pero ¿cómo voy a escribir un bucle para convertirlos en todos los marcos de datos en lugar de objetos únicos? Puedo lograr esto de forma individual utilizando el operador data.frame, pero no estoy seguro de cómo hacerlo. @mrdwab –