Lesen mehrerer Dateien und Berechnen des Mittelwerts basierend auf Benutzereingaben

Ich versuche, eine Funktion in R zu schreiben, die 3 Eingaben annimmt:

VerzeichnisSchadstoffIch würde

Ich habe ein Verzeichnis auf meinem Computer mit CSV-Dateien, d. H. Über 300. Was diese Funktion bewirken würde, wird im folgenden Prototyp gezeigt:

pollutantmean <- function(directory, pollutant, id = 1:332) {
        ## 'directory' is a character vector of length 1 indicating
        ## the location of the CSV files

        ## 'pollutant' is a character vector of length 1 indicating
        ## the name of the pollutant for which we will calculate the
        ## mean; either "sulfate" or "nitrate".

        ## 'id' is an integer vector indicating the monitor ID numbers
        ## to be used

        ## Return the mean of the pollutant across all monitors list
        ## in the 'id' vector (ignoring NA values)
        }

Eine Beispielausgabe dieser Funktion ist hier dargestellt:

source("pollutantmean.R")
pollutantmean("specdata", "sulfate", 1:10)

## [1] 4.064

pollutantmean("specdata", "nitrate", 70:72)

## [1] 1.706

pollutantmean("specdata", "nitrate", 23)

## [1] 1.281

Ich kann das Ganze auf einmal nachlesen:

path = "C:/Users/Sean/Documents/R Projects/Data/specdata"
fileList = list.files(path=path,pattern="\\.csv$",full.names=T)
all.files.data = lapply(fileList,read.csv,header=TRUE)
DATA = do.call("rbind",all.files.data)

Mein Problem sind:

Der Benutzer gibt die ID entweder atomar oder in einem Bereich ein, z. Angenommen, der Benutzer gibt 1 ein, aber der Dateiname lautet 001.csv. Wenn der Benutzer einen Bereich von 1:10 eingibt, lauten die Dateinamen 001.csv ... 010.csvDie Spalte wird vom Benutzer eingegeben, d. H. "Sulfat" oder "Nitrat", für das er / sie den Mittelwert abrufen möchte. In diesen Spalten fehlen viele Werte (die ich aus der Spalte auslassen muss, bevor der Mittelwert berechnet wird.

Die gesamten Daten aus allen Dateien sehen folgendermaßen aus:

summary(DATA)
         Date           sulfate          nitrate             ID       
 2004-01-01:   250   Min.   : 0.0     Min.   : 0.0     Min.   :  1.0  
 2004-01-02:   250   1st Qu.: 1.3     1st Qu.: 0.4     1st Qu.: 79.0  
 2004-01-03:   250   Median : 2.4     Median : 0.8     Median :168.0  
 2004-01-04:   250   Mean   : 3.2     Mean   : 1.7     Mean   :164.5  
 2004-01-05:   250   3rd Qu.: 4.0     3rd Qu.: 2.0     3rd Qu.:247.0  
 2004-01-06:   250   Max.   :35.9     Max.   :53.9     Max.   :332.0  
 (Other)   :770587   NA's   :653304   NA's   :657738

Jede Idee, wie man das formuliert, wäre sehr dankbar ...

Prost

Antworten auf die Frage(8)

Ihre Antwort auf die Frage