vista ver tabla recuperar mapa herramientas fuente establecer diseƱo datos data crear contenido como barra arcmap r dataframe merge rbind read.csv

ver - Fusionando df.1, df.2, df.3... df.x en un marco de datos



ver mapa en arcmap (2)

Estoy trabajando en un proyecto que importa todos los archivos csv de una carpeta determinada y los fusiona en un solo archivo. Pude importar las filas y columnas que quería de cada uno de los archivos de la carpeta, pero ahora necesito ayuda para fusionarlas en un solo archivo. No sé con cuántos archivos terminaré (probablemente alrededor de 120), así que no quiero fusionarlos de 1 en 1.

Esto es lo que tengo hasta ahora:

# Import All files rowsToUse <- c(9:104,657:752) colsToUse <- c(15,27,28,29,30,33,35) filenames <- list.files("save", pattern="*.csv", full.names=TRUE) for (i in seq_along(filenames)) { assign(paste("df", i, sep = "."), read.csv(filenames[i])[!is.na(30),][rowsToUse,colsToUse]) } # Merge into one file for (i in seq_along(filenames)) { df<-rbind(df.[i]) }

La primera parte del código crea una serie de marcos de datos con df.1, df.2, etc. Me gustaría que terminen en un marco de datos final llamado df. Todos los archivos son idénticos en estructura.

¡Realmente apreciaría algo de ayuda si alguien tiene unos minutos más! ¡Gracias!


Como ya ha leído los archivos, puede intentar lo siguiente:

do.call(rbind, mget(ls(pattern = "df")))

El ls(pattern = df) debe capturar todos sus "df.1", "df.2", y así sucesivamente. Es de esperar que no tenga otras cosas nombradas con el mismo patrón, pero si lo hace, experimente con un patrón más estricto hasta que el comando enumere solo sus data.frame s.

mget() incluirá en una list en la que puede usar do.call(rbind, ...) .


Esos todos parecen complicados;). Las respuestas anteriores parecen estar operando en "tenemos una lista de objetos con nombres muy similares, ¿cómo manejamos eso?". Respuesta: no necesitan nombres muy similares. Ni siquiera tienen que ser objetos diferentes.

Si lees los archivos no a través de un bucle for, sino a través de lapply (), obtienes un único objeto que contiene todos los marcos de datos, cada uno como un solo elemento. Estos pueden ser extraídos trivialmente. Entonces tendrías algo que se parece a ...

#Grab a list of filenames filenames <- list.files("save", pattern="*.csv", full.names=TRUE) #Iterate through that list of names, using lapply(), reading the data in. list_of_data_frames <- lapply(filenames, function(x){ #Read the data in to_return <- read.csv(x)[!is.na(30),][c(9:104,657:752),c(15,27,28,29,30,33,35)]) #Return it. You could save lines of code (and processor time!) by just reading #straight into return(), but it would be a lot less clear. return(to_return) }) #Now use do.call to turn it into a single data frame. data.df <- do.call("rbind", list_of_data_frames)