Рассчитать среднее значение одного столбца из нескольких файлов CSV в R
Я новичок в R. У меня более 300 CSV-файлов в папке (с именем 001.csv, 002.csv и т. Д.). Каждый содержит фрейм данных с заголовком. Я пишу функцию, которая будет принимать три аргумента: расположение файлов, имя столбца, для которого нужно вычислить среднее значение (внутри фреймов данных), и файлы, которые вы хотите использовать в вычислениях.
Вот моя функция:
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
}
Похоже, что с моим кодом две вещи не так. Чтобы разбить его на части, я разделил функцию на две отдельные функции для выполнения двух задач: 1) получить необходимые файлы и 2) вычислить среднее значение нужного столбца (иначеpollutant
).
1) Получение соответствующих файлов - это работает, пока я хочу только один файл. Если я выберу ряд файлов, таких как1:25
Я получаю сообщение об ошибке, которое говоритError in file(file, "rt") : invalid 'description' argument
, Я погуглил эту ошибку, но до сих пор не знаю, как ее исправить.
# 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
}
Если я бегуgetfile("specdata", 1)
работает нормально, но если я бегуgetfile("specdata", 1:10)
Я получаю следующую ошибку:Error in file(file, "rt") : invalid 'description' argument
.
2) Вычисление среднего для указанного именованного столбца. Предполагая, что у меня есть пригодный для использования фрейм данных, я пытаюсь вычислить среднее значение с помощью следующей функции:
calcMean <- function(dataset, pollutant) {
polmean <- mean(dataset$pollutant, na.rm = TRUE)
polmean
}
Но если я бегуcalcMean(mydata, "sulfate")
(гдеmydata
это фрейм данных, который я загрузил вручную) Я получаю сообщение об ошибке:Warning message: In mean.default(dataset$pollutant, na.rm = TRUE) : argument is not numeric or logical: returning NA
Странно то, что если я бегуmean(mydata$sulfate, na.rm = TRUE)
в консоли работает нормально.
Я буду признателен за любую помощь, которая укажет мне правильное направление. Я исследовал это в течение нескольких дней, и после бесконечной настройки у меня кончились идеи.