Calcular a média de uma coluna de vários arquivos CSV em R
Eu sou novo em R. Eu tenho mais de 300 arquivos CSV em uma pasta (denominada 001.csv, 002.csv e assim por diante). Cada um contém um quadro de dados com um cabeçalho. Estou escrevendo uma função que terá três argumentos: o local dos arquivos, o nome da coluna que você deseja calcular a média (dentro dos quadros de dados) e os arquivos que você deseja usar no cálculo.
Aqui está a minha função:
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 há duas coisas erradas no meu código. Para resumir, separei a função em duas funções separadas para lidar com as duas tarefas: 1) obtenha os arquivos necessários e 2) calcule a média da coluna desejada (akapollutant
)
1) Obtendo os arquivos apropriados - Funciona desde que eu queira apenas um arquivo. Se eu selecionar um intervalo de arquivos, como1:25
Recebo uma mensagem de erro que dizError in file(file, "rt") : invalid 'description' argument
. Eu pesquisei esse erro no Google, mas ainda não tenho idéia de como corrigi-lo.
# 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
}
Se eu corrergetfile("specdata", 1)
funciona bem, mas se eu corrergetfile("specdata", 1:10)
Estou tendo o erro a seguir:Error in file(file, "rt") : invalid 'description' argument
.
2) Calculando a média da coluna nomeada especificada - Supondo que eu possua um quadro de dados utilizável, tento calcular a média com a seguinte função:
calcMean <- function(dataset, pollutant) {
polmean <- mean(dataset$pollutant, na.rm = TRUE)
polmean
}
Mas se eu corrercalcMean(mydata, "sulfate")
(Ondemydata
é um quadro de dados que carreguei manualmente) recebo uma mensagem de erro:Warning message: In mean.default(dataset$pollutant, na.rm = TRUE) : argument is not numeric or logical: returning NA
O estranho é que se eu corrermean(mydata$sulfate, na.rm = TRUE)
no console, funciona bem.
Agradeço qualquer ajuda que me aponte na direção certa. Pesquisei isso por vários dias e, após infinitos ajustes, fiquei sem ideias.