Вычислить среднее значение одного столбца из нескольких 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) рассчитать среднее значение требуемого столбца (aka pollutant ).

1) Получение соответствующих файлов – работает до тех пор, пока мне нужен только один файл. Если я выберу ряд файлов, например 1:25 я получаю сообщение об Error in file(file, "rt") : invalid 'description' argument . У меня есть ошибка в Google, но до сих пор не знаю, как это исправить.

 # 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) , он отлично работает.

Я буду признателен за любую помощь, которая укажет мне в правильном направлении. Я исследовал это несколько дней и после бесконечной настройки, у меня закончилась идея.

Вам не нужно больше функций. Решение может быть проще из моего понимания в 6 строках:

 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) } 

Я думаю, что ваша главная проблема заключается в перечислении файлов в вашем рабочем каталоге и чтении их в R. Попробуйте функцию list.files в R Пример кода, который может работать для вас

  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") 

Эта программа дает вам данные с именем файла в первом столбце и соответствующими средствами во втором столбце.

  • Изменение цвета в ggpairs теперь, когда параметры устарели
  • Построение графика с помощью ggplot2: «Ошибка: дискретное значение, заданное для непрерывного масштабирования» по категориальной оси y
  • Как избежать предупреждения при введении НС путем принуждения
  • Объединить строки по конкретным столбцам данных
  • Что такое «объект типа« закрытие »не является подмножеством« ошибка в «Блестящем»?
  • Изменение меток по оси x в каждой грани
  • Разница между скобками и двойной скобкой ] для доступа к элементам списка или кадра данных
  • R разделить числовой вектор в позиции
  • readRDS (файл) в R
  • R - список к кадру данных
  • Как увеличить размер шрифта на графике в R?
  • Давайте будем гением компьютера.