Calcule la media de una columna de varios archivos CSV en R

Soy nuevo en R. Tengo más de 300 archivos CSV en una carpeta (llamados 001.csv, 002.csv, etc.). Cada uno contiene un dataframe con un encabezado. Estoy escribiendo una función que tomará tres argumentos: la ubicación de los archivos, el nombre de la columna que desea calcular la media (dentro de los marcos de datos) y los archivos que desea usar en el cálculo.

Aquí está mi función:

pollutantmean2 <- function(directory = getwd(), pollutant, id = 1:332) { # add one or two zeros to ID so that they match the CSV file names filenames <- sprintf("%03d.csv", id) # path to specdata folder # if no path is provided, default is working directory filedir <- file.path(directory, filenames) # get the data from selected ID or IDs from the specified path dataset <- read.csv(filedir, header = TRUE) # calculate mean removing all NAs polmean <- mean(dataset$pollutant, na.rm = TRUE) # return mean polmean } 

Parece que hay dos cosas mal con mi código. Para dividirlo, separé la función en dos funciones separadas para manejar las dos tareas: 1) obtener los archivos necesarios y 2) calcular la media de la columna deseada (también conocido como pollutant ).

1) Obteniendo los archivos apropiados – Funciona siempre que solo quiera un archivo. Si selecciono un rango de archivos, como 1:25 , 1:25 un mensaje de error que dice Error in file(file, "rt") : invalid 'description' argument . He buscado este error en Google pero todavía no tengo ni idea de cómo solucionarlo.

 # function that gets csv files and stores them getfile <- function(directory = getwd(), id) { filenames <- sprintf("%03d.csv", id) filedir <- file.path(directory, filenames) dataset <- read.csv(filedir, header = TRUE) dataset } 

Si ejecuto getfile("specdata", 1) funciona bien, pero si ejecuto getfile("specdata", 1:10) el siguiente error: Error in file(file, "rt") : invalid 'description' argument

2) Cálculo de la media de la columna nombrada especificada – Suponiendo que tengo una ttwig de datos utilizable, trato de calcular la media con la siguiente función:

 calcMean <- function(dataset, pollutant) { polmean <- mean(dataset$pollutant, na.rm = TRUE) polmean } 

Pero si ejecuto calcMean(mydata, "sulfate") (donde mydata es un dataframe que cargué manualmente) recibo un mensaje de error: Warning message: In mean.default(dataset$pollutant, na.rm = TRUE) : argument is not numeric or logical: returning NA

Lo curioso es que si ejecuto mean(mydata$sulfate, na.rm = TRUE) en la consola, funciona bien.

Apreciaré cualquier ayuda que me señale en la dirección correcta. Lo he investigado durante varios días y después de un sinfín de ajustes, me he quedado sin idea.

No necesitas más funciones. La solución puede ser más simple desde mi comprensión en 6 líneas:

 pollutantmean <- function(directory, pollutant, id = 1:10) { filenames <- sprintf("%03d.csv", id) filenames <- paste(directory, filenames, sep="/") ldf <- lapply(filenames, read.csv) df=ldply(ldf) # df is your list of data.frames mean(df[, pollutant], na.rm = TRUE) } 

Creo que su principal problema es enumerar los archivos en su directorio de trabajo y leerlos en R. Pruebe la función list.files en el código R Example que puede funcionar para usted

  files <- list.files(pattern = ".csv") ## creates a vector with all file names in your folder polmean <- rep(0,length(files)) for(i in 1:length(files)){ data <- read.csv(files[i],header=T) polmean[i] <- mean(data$pollutant) } result <- cbind(files,polmean) write.csv(result,"result_polmeans.csv") 

Este progtwig le proporciona los datos con el nombre del archivo en la primera columna y los medios correspondientes en la segunda columna.