【发布时间】:2014-07-01 16:17:17
【问题描述】:
我正在尝试在 R 中编写一个需要 3 个输入的函数:
- 目录
- 污染物
- 身份证
我的计算机上有一个包含 CSV 文件的目录,即超过 300 个。这个函数的作用如下面的原型所示:
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)
}
此函数的示例输出如下所示:
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
我可以一口气读完全文:
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)
我的问题是:
- 用户输入的 id 可以是原子的,也可以是在一个范围内,例如假设用户输入 1 但文件名是 001.csv 或者如果用户输入范围 1:10 那么文件名是 001.csv ... 010.csv
- 列由用户输入,即他/她有兴趣获取平均值的“硫酸盐”或“硝酸盐”...这些列中有很多缺失值(我需要在计算之前从列中省略这些值)平均值。
所有文件的全部数据如下所示:
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
任何想法如何制定这一点将不胜感激......
干杯
【问题讨论】:
-
我现在正在努力完成这项任务。 JHU家伙的教学设计非常糟糕。第一个作业应该是使用一个 CSV 文件的作业……让学生逐步建立技能。合并多个CSV文件应该是赋值2,或者3。不得不发泄。
标签: r function subset mean missing-data