Coursera课程-r语言-程序作业1

来源:互联网 发布:c语言死机病毒怎么处理 编辑:程序博客网 时间:2024/06/05 06:30

题目介绍:

r语言课程的第一个程序作业。将要编写3个函数。实验数据为“美国大气污染”的数据,可以从Coursera上下载,下载后的文件为zip文件。需要自行解压缩并添加到你的作业项目中。

数据介绍:

zip文件可以从这里下载:
specdata.zip [2.4MB]
这个zip文件中包含了332个csv文件。csv文件中记录着检测大气质量的数据,记录着美国332个地区的“细微颗粒值(PM值)”。每个csv文件中代表着一个监测地区的记录。例如:地区200的大气数据,记录在文件“200.csv”中。每个文件包含三个变量:
-Date:date的数据以“YYYY-MM-DD”的方式存储
-sulfate:空气中硫化物颗粒水平
-nitrate:空气中硝化物颗粒水平
本作业中,你需要解压缩这个zip文件,并保存在目录名为“specdata”的文件夹下。你可以打开csv文件观察数据,你会发现里面包含着很多空值,这在空气质量监控的数据集中非常常见。

Part1

第一部分功能介绍:

编写一个函数“pollutantmean”能够计算指定文件列表中所有大气数据的污染物(sulfate或者nitrate)的均值。这个函数有三个属性,分别是’directory’、’pollutant’和’id’。’directory’代表文件目录,’pollutant’代表污染物的名称,’id’代表文件序列,是一个数值向量。注意,在数据处理中,你需要去掉空值。

第一部分程序实现:

pollutantmean <- function(directory, pollutant, id = 1:332) {  filenames<-dir(directory, full.names=T)  n<-length(id)  m<-rep(0,n)  ct<-rep(0,n)  for(i in id){    data<-read.csv(filenames[i],header=TRUE)    ct[match(i,id)]<-sum(!is.na(data[pollutant]))    m[match(i,id)]<-mean(as.matrix(data[pollutant]),na.rm=TRUE)  }  result<-(m[ct>0] %*% ct[ct>0])[1,1]/sum(ct[ct>0])  result  }

第一部分程序运行结果:

> source("pollutantmean.R")> pollutantmean("specdata", "sulfate", 1:10)[1] 4.064128> pollutantmean("specdata", "nitrate", 70:72)[1] 1.706047> pollutantmean("specdata", "nitrate", 23)[1] 1.280833

Part2

第二部分功能介绍:

编写一个函数“complete”读取文件目录下的所有文件,计算每个csv文件中完整的记录数(每条记录都不包含空值)。函数需要返回一个dataframe,第一列为文件id,第二列为记录数nobs。

第二部分程序实现:

complete <- function(directory, id = 1:332) {  files_list <- dir(directory, full.names=T)[id]  data_list<-lapply(files_list,read.csv)  nobs<-sapply(lapply(data_list,complete.cases),sum)  result<-as.data.frame(cbind(id,nobs))  result}

第二部分程序运行结果:

> source("complete.R")> complete("specdata", 1)  id nobs1  1  117> complete("specdata", c(2, 4, 8, 10, 12))  id nobs1  2 10412  4  4743  8  1924 10  1485 12   96> complete("specdata", 30:25)  id nobs1 30  9322 29  7113 28  4754 27  3385 26  5866 25  463> complete("specdata", 3)  id nobs1  3  243

Part3

第三部分功能介绍:

编写一个函数“corr”,读取指定文件目录下的文件,当csv文件中完整的记录数超过预设的阀值时,计算该文件中sulfate和nitrate的相关系数。这个函数最后需要返回一个相关系数向量。

第三部分程序实现:

corr <- function(directory, threshold = 0) {  source("complete.R")  IN<-complete(directory,id = 1:332)  id<-as.vector(IN[IN$nobs>threshold,"id"])  result<-c()  for(i in id){    files_list <- dir(directory, full.names=T)[i]    data<-read.csv(files_list,header=TRUE)    dataNoNA<-na.omit(data)    corrresult<-cor(dataNoNA$sulfate,dataNoNA$nitrate)    result<-c(result,corrresult)  }  result}

第三部分程序运行结果:

> source("corr.R")> source("complete.R")> cr <- corr("specdata", 150)> head(cr)[1] -0.01895754 -0.14051254 -0.04389737 -0.06815956 -0.12350667[6] -0.07588814> summary(cr)    Min.  1st Qu.   Median     Mean  3rd Qu.     Max. -0.21060 -0.04999  0.09463  0.12530  0.26840  0.76310 > cr <- corr("specdata", 400)> head(cr)[1] -0.01895754 -0.04389737 -0.06815956 -0.07588814  0.76312884[6] -0.15782860> summary(cr)    Min.  1st Qu.   Median     Mean  3rd Qu.     Max. -0.17620 -0.03109  0.10020  0.13970  0.26850  0.76310 > cr <- corr("specdata", 5000)> summary(cr)Length  Class   Mode      0   NULL   NULL > length(cr)[1] 0> cr <- corr("specdata")> summary(cr)    Min.  1st Qu.   Median     Mean  3rd Qu.     Max. -1.00000 -0.05282  0.10720  0.13680  0.27830  1.00000 > length(cr)[1] 323

完成这个作业还是花了蛮多时间的,但是最终完成还是很有成就感的。fighting!!!

转载请注明作者“MieAn100”及其出处
CSDN博客(http://blog.csdn.net/MieAn100)

1 0
原创粉丝点击